线性表的顺序表示与实现1

线性表的顺序表示与实现1,第1张

线性表的顺序表示与实现1

文章目录
      • ==线性表的顺序表示和实现1==
        • 1、顺序存储定义:
        • 2、顺序存储结构:
        • 3、顺序表中元素存储位置的计算:
        • 4、顺序表的顺序存储表示:
        • 5、==线性表的定义:==
          • ==多项式的顺序存储结构类型定义:==
          • ==图书表的顺序存储结构类型定义:==
        • 6.类C语言有关 *** 作
          • 1.顺序表类型定义
          • 2.数组定义
          • 3.C语言的内存动态分配
          • 4.C++的动态存储分配
          • 5.C++中的参数传递

线性表的顺序表示和实现1

在计算机内,线性表有两种基本的存储结构:顺序存储结构和链式存储结构

线性表的顺序表又称为顺序存储结构或顺序映像

1、顺序存储定义

顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构

逻辑上相邻,物理上也相邻

基地址(起始位置):线性表的第一个数据元素a1的存储位置

2、顺序存储结构:

依次存储,地址连续,中间没有空出存储单元,(占用一片连续的存储空间)是一个典型的线性表顺序存储结构

3、顺序表中元素存储位置的计算:

知道首地址和每个元素占的内存单元数 即可计算每个元素的存储位置

任一元素均可随机存取(优点) 存和取

4、顺序表的顺序存储表示:

----- 用一维数组表示顺序表

线性表长度可变 但是数组的长度不可动态定义(不可变) ----- 单独用一变量表示顺序表的长度

5、线性表的定义:
#define LIST_INIT_SIZE 100   //线性表存储空间的初始分配量     
typedef struct{
    ElemType elem[LIST_SIZE];  //数组
    int length;  //当前长度
}SqList; 

init(initialization初始化) SqList(顺序表) ElemType(元素类型)

多项式的顺序存储结构类型定义:
#define MAXSIZE 1000   //多项式可能达到的最大长度

typedef struct {    //多项式非零项的定义
    float p;        //系数
    int e;      	//指数
}Polynomial;//一个该元素类型8个字节(4+4)

typedef struct {    //线性表定义
    Polynomial *elem;  //存储空间的基地址    元素类型是Polynomial  好比int *elem
    int length;   	   //多项式中当前项的个数
}SqList;     
    

Polynomial: 多项式

图书表的顺序存储结构类型定义:
#define MAXSIZE 10000   //图书表可能达到的最大长度

typedef struct {  //图书信息定义
    char no[20];    //图书ISBN
    char name[50];  //图书名字
    float price;    //图书价格
}Book;

typedef struct {
    Book *elem;   //存储空间的基地址 Book型
    int length;   //图书表中当前图书的个数
}SqList;   //图书表的顺序存储结构类型为SqList
6.类C语言有关 *** 作 1.顺序表类型定义
typedef struct {
    ElemType date[];   //定义数组 
    int length;   //定义长度 
}SqList;

ElemType元素类型:可写char、float、Book结构类型、Polynomial结构类型

可事先做 typedef char ElemType; typedef int ElemType; 将ElemType定义为char/int类型来使用

2.数组定义

数组静态分配:

typedef struct {
    ElemType date[MaxSize];  //数组名也是首地址
    int length;
}SqList;   //顺序表类型

数组动态分配:

typedef struct {
    ElemType *date;  //数组的首地址
    int length;
}SqList;   //顺序表类型
3.C语言的内存动态分配

需要加载头文件:include < stdlib.h >

malloc(m)函数:开辟m字节长度的地址空间,并返回这段空间的首地址 m为整数

free§函数:释放指针p所指变量的存储空间,即彻底删除一个变量

动态分配内存:

SqList L; //用顺序表类型定义1个变量L
L.date=(ElemType*)malloc(sizeof(ElemType)*MaxSize);  //基地址
   	(申请的空间如何划分)malloc(需要的字节数)
(L.date是数组的首地址)

(char*)malloc(800) —> 800个空间

(int*)malloc(800) —> 200个空间

(Polynomial*)malloc(800) —> 100个空间

***** :( )是强制类型转换运算—>(int)强转为整数 (int*)强转为指向整型的指针

malloc() 与 free() 配套使用

new 与 delete 配套使用

4.C++的动态存储分配

new 类型名T (初值列表)

功能:申请存放T类型对象的内存空间,并依初值列表赋以初值

结果值:成功:T类型的指针,指向新分配的内存 失败:0(NULL)

int *p1 = new int; 没有赋初值

int *p1 = new int(10); 赋初值10

delete 指针P

功能:释放指针P所指向的内存。P必须是new *** 作的返回值

delete p1;

5.C++中的参数传递

参数传递的两种方式

1、传值方式:参数为整型、实型、字符型等

2、传地址:参数是指针变量

​ 参数是引用类型(C++) &

​ 参数是数组名

引用类型作参数

引用:给对象提供一个替代的名字

int i=5; int &j=i; (j引用i) j是i的一个替代名, *** 作i和j是一样的,i值改变时,j值也跟着改变

★:i、j地址一样,共用同一个空间

void swap (float &m, float &n){};   swap(a,b)

m引用a,n引用b  &m=a, &m=b。m和a用同一块空间,n和b用同一块空间

相比一般变量作参数,节省了实参变量副本的空间

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5651828.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存