删除顺序表元素

156 阅读1分钟

题目:
长度为n,删除值为x的数据元素,要求时间复杂度为O(n),空间复杂度O(1)。

分析:

    用k记录删除元素个个数,一边遍历顺序表一边统计k,并将不等于x的元素向前挪k个位置。

代码如下:

#include <stdio.h>
void deleteX(int *arr,int n,int len) {
	int k = 0,i=0;//进行计数
	while (i<len) {
		if (*(arr+i)==n) {
			k++;
		}
		else {
			*(arr + k) = *(arr + i);
		}
		i++;
	}
	for (int i = 0; i < len-k; i++) {
		printf("%d ", *(arr + i));
	}
}
int main() {
	int arr[] = {1,2,3,2,4,2};//也可以手动赋值的
	int len = sizeof(arr) / sizeof(int);
	deleteX(arr,2,len);//要删除的元素也可以有用户输入
	return 0;
}

由于C语言无法设置数组长度,这里只能在输出上进行控制