线性表的顺序存储称为顺序表(Sequence List),表中元素的逻辑顺序与其物理顺序相同。
结构类型定义
- 静态分配
- 动态分配
// C 的动态分配语句
L.data = (ElemType*)malloc(sizeof(ElemType) * InitSize);
// C++ 的动态分配语句
L.data = new ElemType[InitSize];基本操作的实现
插入操作
- 最好情况:表尾插入,时间复杂度
- 最坏情况:表头插入,时间复杂度
- 平均情况:时间复杂度
bool ListInsert(SqList &L, int i, ElemType e) {
if (i < 1 || i > L.length + 1) // i 值不合法
return false;
else if (L.length >= MAXSIZE) // 当前存储空间已满
return false;
for (int j = L.length; j >= i; j--)
L.elem[j] = L.elem[j - 1]; // 插入位置及之后位置后移
L.elem[i - 1] = e; // 将新元素放入第 i 个位置
L.length++; // 表长增加 1
return true;
}删除操作
- 最好情况:删除表尾元素,时间复杂度
- 最坏情况:删除表头元素,时间复杂度
- 平均情况:时间复杂度
bool ListDelete(SqList &L, int i, ElemType &e) {
if (i < 1 || i > L.length) // 判断 i 值是否合理
return false;
e = L.data[i - 1];
for (int j = i; j < L.length; j++)
L.elem[j - 1] = L.elem[j];
L.length--;
return true;
}按值查找(顺序查找)
- 最好情况:查找元素在表头,时间复杂度
- 最坏情况:查找元素在表尾(或不存在),时间复杂度
- 平均情况:时间复杂度