插入操作
-
插入方法的定义
- 在顺序表 的第个位置插入新元素
- 若 的输入不合法,则返回
false**,**表示插入失败 - 否则,将顺序表的第 个元素及其后的
所有元素右移一个位置,腾出一个空位置插入新元素 ,顺序表长度增加 。插入成功,返回true
-
插入方法的代码实现
#define MaxSize 10; typeof struct { int data[MaxSize]; int length; }SqList bool ListInsert(SqList &L, int i, int e) { // 判断 i 的范围是否有效 if (i < 1 || i > L.length + 1) { return false } // 当前存储空间已满,不能插入 if (L.length >= MaxSize) { return false } for (int j = L.length; j >= i; j--) { L.data[j] = L.data[j - 1] // 将第 i 个元素及之后的元素后移 } L.data[i - 1] = e; L.length++; return true; } -
插入操作的时间复杂度
- 最好情况:在表尾插入,即 ,元素后移语句不执行,时间复杂度为 O(1)
- 最坏情况:在表头插入,即 ,元素后移执行 n 次,时间复杂度为 O(n)
- 平均情况:
删除操作
-
删除方法的定义
删除顺序表 中第 个位置的元素,若成功则返回
true并将被删除的元素用引用变量 返回,否则返回
false -
删除方法的代码
bool ListDelete(SqList &L, int i, int &e) { if (i < 1 || i > L.length) { return false; }; e = L.data[i - 1]; for (int j = i; j < L.length; j++) { L.data[j - 1] = L.data[j]; } L.length--; return true; }