C++ 线性表删除元素:高效保留顺序存储
#include <iostream>
using namespace std;
typedef int ElementType;
typedef struct LNode *PtrToLNode;
struct LNode {
ElementType Data[100];
int Length;
};
typedef PtrToLNode List;
List Delete(List &L, ElementType minD, ElementType maxD) {
int k = 0; // 记录满足条件的元素个数
for (int i = 0; i < L->Length; i++) {
if (L->Data[i] < minD || L->Data[i] > maxD) {
L->Data[k++] = L->Data[i];
}
}
L->Length = k;
return L;
}
int main() {
List L = new LNode;
L->Data[0] = 1;
L->Data[1] = 2;
L->Data[2] = 3;
L->Data[3] = 4;
L->Data[4] = 5;
L->Length = 5;
List result = Delete(L, 2, 4);
for (int i = 0; i < result->Length; i++) {
cout << result->Data[i] << ' ';
}
cout << endl;
delete L;
return 0;
}
以上代码展示了一个简单的 C++ 函数实现,用于删除线性表中小于 minD 或大于 maxD 的元素,并保留剩余元素的顺序存储和相对位置。该函数假设线性表的最大长度为 100,可以根据实际需求进行调整。
函数 Delete 的工作原理:
- 使用一个循环遍历线性表
L中的所有元素。 - 如果当前元素的值小于
minD或大于maxD,则将该元素复制到L->Data[k]位置,并将k指针递增。 - 循环结束后,将
L->Length设置为k,表示剩余元素的个数。 - 最后返回删除后的线性表
L。
示例说明:
在 main 函数中,我们创建了一个包含五个元素的线性表,并调用 Delete 函数删除小于 2 或大于 4 的元素。最终输出的结果为 1 2 4 5,体现了代码的功能:删除指定范围外的元素并保持剩余元素的顺序存储和相对位置不变。
总结:
本代码提供了一个简单且高效的方案,用于从顺序存储的线性表中删除特定范围内的元素,并确保剩余元素的顺序和位置不变。您可以根据实际需求修改线性表的最大长度和元素类型。
原文地址: http://www.cveoy.top/t/topic/pb3p 著作权归作者所有。请勿转载和采集!