顺序表

顺序表和数组十分相似,添加数据时需要先判断数据插入的位置是否合法,然后从后往前(防止前面的数据将后面的覆盖)将插入位置之后的数据元素后移1位。
删除首先也是判断删除的位置是否合法,将要删除的数据保存在一个变量中(方便日后查找),接着从前往后(防止后面的数据覆盖前面的数据)将被删除元素之后的元素前移1位。
查找数据遍历所有数据元素,找到合适的在返回他的位置。

#include <iostream>
using namespace std;

const int MAXSIZE = 100; // 定义最大容量
typedef int ElemType; // 定义元素类型

struct SqList {
    ElemType elem[MAXSIZE]; // 存储元素的数组
    int length; // 当前元素的个数
};

// 获取元素
int GetElem(SqList L, int i, ElemType &e) {
    if (i < 1 || i > L.length) {
        return 0; // 位置不合法
    } else {
        e = L.elem[i - 1]; // 获取元素
        return 1; // 成功
    }
}

// 定位元素
int LocateElem_Sq(SqList L, ElemType e) {
    for (int i = 0; i < L.length; i++) {
        if (L.elem[i] == e) {
            return i + 1; // 返回元素的位置
        }
    }
    return 0; // 没有找到元素
}

// 插入元素
int ListInsert_Sq(SqList &L, int i, ElemType e) {
    if (i < 1 || i > L.length + 1) {
        return 0; // 位置不合法
    }
    if (L.length == MAXSIZE) {
        return 0; // 存储空间已满
    }
    // 从后往前移动元素,为插入腾出位置
    for (int j = L.length - 1; j >= i - 1; j--) {
        L.elem[j + 1] = L.elem[j];
    }
    L.elem[i - 1] = e; // 插入元素
    ++L.length; // 更新长度
    return 1; // 成功
}

// 删除元素
int ListDelete_Sq(SqList &L, int i) {
    if (i < 1 || i > L.length) {
        return 0; // 位置不合法
    }
    // 保存删除的元素
    ElemType a = L.elem[i - 1];
    // 从前往后移动元素,覆盖要删除的元素
    for (int j = i; j < L.length; j++) {
        L.elem[j - 1] = L.elem[j];
    }
    --L.length; // 更新长度
    return 1; // 成功
}

// 输入列表
void ListInput(SqList &L) {
    int LENGTH;
    cin >> LENGTH; // 输入列表长度
    L.length = LENGTH; // 更新列表长度
    for (int i = 0; i < LENGTH; i++) {
        cin >> L.elem[i]; // 输入元素
    }
}

// 输出列表
void ListOutput(SqList L) {
    for (int i = 0; i < L.length; i++) {
        cout << L.elem[i] << " "; // 输出元素
    }
    cout << endl; // 输出换行
}
posted @ 2024-09-27 11:07  呓语-MSHK  阅读(12)  评论(0)    收藏  举报