存储结构
线性表存储结构分为顺序存储结构和链式存储结构,前者称为顺序表,后者称为链表。
顺序存储结构
定义:顺序表就是把线性表中的所有元素按照某种逻辑顺序,依次存储到从指定位置开始的一块连续的存储空间
特点
逻辑上相邻的数据元素,物理次序也是相邻的。
只要确定好了存储线性表的起始位置,线性表中任一数据元素都可以随机存取,所以线性表的顺序存储结构是一种随机存取的储存结构,因为高级语言中的数组类型也是有随机存取的特性,所以通常我们都使用数组来描述数据结构中的顺序储存结构,用动态分配的一维数组表示线性表。
**数组长度和线性表的长度区别:**数组长度是存放线性表的存储空间的长度,存储分配后这个量一般是不变的,线性表的长度是线性表中数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的。
优缺点
优点 | 缺点 |
无需为表示表中元素之间的逻辑关系而增加额外的存储空间 | 插入和删除操作需要移动大量元素 |
可快速的存取表中的任一位置元素 | 当线性表长度变化比较大时,难以确定存储空间的容量 |
容易造成存储空间碎片 |
基本操作
结构体定义
顺序表可以分为静态分配和动态分配两种:
- 静态分配
#define MaxSize 50 / /顺序表的最大长度
typedef struct{ // typedef类型重命名
ElemType data[MaxSize]; // 顺序表的元素,ElemType是未明确的数据类型,使用时可以用typedef定义具体类型
int length; // 长度
}SqList;
静态分配方法需要预先分