顺序表删除指定元素
对长度为n的顺序表L,编写一个时间复杂度为O(n)
、空间复杂度为O(1)
的算法,该算法删除线性表中所有值为x
的数据元素。
注意删除元素后,不要忘记需要将顺序表后方的元素前移。
1.思路
设置一个变量k用于记录已经删除元素的个数,当遍历到后方的元素时,只需要将该元素向前移动k个位置即可。
2.参考代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include "preset.h"
void listDelete(SqList &sql, int x) { int k = 0; for (int i = 0; i < sql.length; ++i) { if (sql.elem[i] == x) { k++; } else { sql.elem[i - k] = sql.elem[i]; } } sql.length = sql.length - k; }
int main () { SqList sql = {{1, 7, 2, 1, 4, 1, 6, 5, 1, 9}, 10}; cout << "Current SqList: "; print(sql); listDelete(sql, 1); cout << "AfterDeletion : "; print(sql); return 0; }
|