顺序表的应用:
删除其中所有值等于x的元素,要求算法的时间复杂度为O(n),空间复杂度为0(1)
这里介绍三种方法:
方法一:
void DeleteX(seqlist*& L, ElemType x) {
int i = 0,j=0,k=0;
//方法1
while (i<L->length)
{
if (L->data[i] != x) {
//不是x
L->data[j] = L->data[i];
j++;
}
else {
//是x
k++;
}
i++;
}
//最后计算长度(减去k)
L->length -= k;
}
方法2:
void DeleteX(seqlist*& L, ElemType x) {
int i = 0,j=0,k=0;
for (i = 0; i < L->length; i++) {
if (L->data[i] != x) {
//不是x
L->data[j] = L->data[i];
j++;
}
}
L->length = j;
}
其实方法一和方法二的思路是类似的,推荐大家用方法2,代码简洁
方法3:
void DeleteX(seqlist*& L, ElemType x) {
int i = 0,j=0,k=0;
while (i<L->length)
{
if (L->data[i] == x) {
//是x
k++;
}
else {
//不是x
L->data[i - k] = L->data[i];
}
i++;
}
L->length -= k;
}