与408的关联:1. 顺序表结合排序出了很多大题。2. 链表本身出很多大题!
顺序表的顺序表示原理
- 线性表的特点:
- 表中元素的个数是有限的
- 表中元素的数据类型都相同。意味着每一个元素都占用相同大小的空间。
- 表中元素具有逻辑上的顺序性,在序列中各元素排序有其先后顺序。
- 线性表第一个元素的数组下标是0。
线性表的顺序表示(顺序表)
顺序表的定义
#define MaxSize 50 //定义线性表的长度
typedef struct{
ElemType data[MaxSize]; //顺序表的元素
int len; //顺序表的当前长度
}SqList; 顺序表的类型定义
优点:
- 可以随机存取(根据表头元素地址和元素序号)表中任意一个元素。
- 存储密度高,每个结点只存储数据元素。
缺点:
- 插入和删除操作需要移动大量元素。
- 线性表变化较大时,难以确定存储空间的容量。
- 存储分配需要一整段连续的存储空间,不够灵活。
插入操作
- 最好情况:新元素插入到表尾,不需要移动元素,最好时间复杂度 = O(1)
- 最坏情况:新元素插入到表头,需要将原有的n个元素全都向后移动,最坏时间复杂度 = O(n)
- 平均情况:假设新元素插入到任何一个位置的概率相同,平均移动元素的次数是n/2,时间复杂度 = O(n)
//判断插入位置i是都合法(满足i <= length + 1)
//判断存储空间是否已满(即插入e后是否会超出数组长度)
for(int j =