顺序表的应用:
删除其中所有值等于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;
}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐