C++对于含有n个整数元素的顺序表L,设计一个算法用于删除其中所有值为x 的元素,例如L=(1,2,1,5,1),若x=1,则删除后L=(2,5),完整代码
时间: 2024-09-28 13:03:05 浏览: 28
两个有序顺序表的合并
5星 · 资源好评率100%
在C++中,你可以通过遍历顺序表并检查每个元素来实现这个功能。这里提供一个简单的线性时间复杂度O(n)的算法,不涉及额外的数据结构:
```cpp
#include <iostream>
using namespace std;
void removeDuplicates(int arr[], int n, int x) {
// 初始化索引,表示新的有效元素位置
int currentIndex = 0;
// 遍历顺序表
for (int i = 0; i < n; ++i) {
// 如果当前元素不等于x,或者已经是最后一个元素,直接复制到新位置
if (arr[i] != x || i == n - 1) {
arr[currentIndex++] = arr[i]; // 移动指针并保留元素
}
}
// 调整数组大小,移除多余的空间
arr[currentIndex] = 0; // 确保最后一个元素置零,以便清楚后续操作
int newSize = currentIndex;
resize(arr, newSize); // 使用容器自带函数缩小数组大小
}
// 测试示例
int main() {
int L[] = {1, 2, 1, 5, 1};
int n = sizeof(L) / sizeof(L[0]);
int x = 1;
removeDuplicates(L, n, x);
for (int i = 0; i < n; ++i) {
cout << L[i] << " "; // 打印处理后的顺序表
}
return 0;
}
```
在这个例子中,`removeDuplicates`函数会修改原数组`L`,删除所有值为`x`的元素。运行上述代码,你会得到处理后的结果`(2, 5)`。
阅读全文