#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 的工作原理:

  1. 使用一个循环遍历线性表 L 中的所有元素。
  2. 如果当前元素的值小于 minD 或大于 maxD,则将该元素复制到 L->Data[k] 位置,并将 k 指针递增。
  3. 循环结束后,将 L->Length 设置为 k,表示剩余元素的个数。
  4. 最后返回删除后的线性表 L

示例说明:

main 函数中,我们创建了一个包含五个元素的线性表,并调用 Delete 函数删除小于 2 或大于 4 的元素。最终输出的结果为 1 2 4 5,体现了代码的功能:删除指定范围外的元素并保持剩余元素的顺序存储和相对位置不变。

总结:

本代码提供了一个简单且高效的方案,用于从顺序存储的线性表中删除特定范围内的元素,并确保剩余元素的顺序和位置不变。您可以根据实际需求修改线性表的最大长度和元素类型。

C++ 线性表删除元素:高效保留顺序存储

原文地址: http://www.cveoy.top/t/topic/pb3p 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录