**
如何实现线性表的顺序存储
**
线性表的顺序存储又称顺序表
特点:逻辑顺序与其物理顺序相同
起始位置为loc(A),sizeof(ElemType)是每个数据元素所占用存储空间的大小,则顺序存储如图所示:
顺序表 | 内存地址 |
---|---|
a1 | loc(A) |
a2 | loc(A)+sizeof(ElemType) |
… | … |
ai | loc(A)+(i-1)*sizeof(ElemType) |
… | … |
an | loc(A)+(n-1)*sizeof(ElemType) |
… | … |
… | loc(A)+(MaxSize-1)*sizeof(ElemType) |
注意:线性表中元素的位序是从1开始,但是数组下标是从0开始。
假定数据元素类型为ElemType,则线性表的顺序存储结构描述为
两种基本方式:静态分配和动态分配
-
静态分配:
#define MaxSize 50 //定义线性表的最大长度
typedef struct{
ElemType data[MaxSize]; //顺序表元素
int length; //顺序表的当前长度
}SqList; //顺序表的类型定义 -
动态分配
#define InitSize 50 //表长初始化定义
typedef struct{
ElemType *data; //指示动态分配数组的指针
int MaxSize; //数组最大容量
int length; //顺序表的当前长度
}SeqList; //顺序表的类型定义
动态分配是需要调用函数malloc:申请一整片连续的内存空间,执行结束以后会形成一个指向这一整片空间开始地方的指针。
C的初试动态分配语句:
L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);
注意:动态分配并不是链式存储,它属于顺序存储结构,依旧是随机存储方式,只是分配空间的大小可以在运行的时候决定。