题目:
对长度为n的顺序表L,编写一个时间复杂度O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素。
算法思想:
第一步:从前往后扫描顺序表,用k纪录当前值为x的数据元素的个数
第二步:如果扫描的当前元素的值为x,则k++;如果扫描的当前元素的值不为x,则将此当前元素向前移动k位
代码:
void Del_x_k(Sqlist &L,ElemType x) {
int k = 0; //用k纪录值为x的数据元素的个数
for (int i = 0; i < L.length; i++) {
if (L.data[i] == x)
k++;
else
L.data[i - k] = L.data[i];//当前元素前移k个位置
}
L.length = L.length - k;//顺序表的长度-k
}
结语
如果你喜欢我写的文章,欢迎来踩我个人搭建的博客~
ChengNing’s Blog