03.05 顺序存储结构的插入与删除

线性表获得元素的代码

#include <stdio.h>

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

//Status是函数的类型,其值是函数结果状态代码,比如OK
typedef int Status;
typedef int ElemType;

typedef struct {
    ElemType *data;  // 存储线性表元素的数组
    int length;      // 线性表的当前长度
} SqList;

//SqList L:表示一个顺序表(线性表的一种实现方式)。SqList 是一个结构体类型,通常包含一个数组 data 和一个整数 length。
//ElemType *e:表示一个指向 ElemType 类型的指针,用于返回获取到的元素。
Status GetElem(SqList L, int i, ElemType *e)
{
    if (L.length == 0 || i < 1 || i > L.length)
        return ERROR;
    //将获取到的元素赋值给指针 `e` 所指向的变量。
    *e = L.data[i - 1];
    return OK;
}

int main() {
    SqList L;
    L.data = (ElemType *)malloc(5 * sizeof(ElemType));  // 分配5个元素的空间
    L.length = 5;

    // 填充线性表
    for (int i = 0; i < L.length; i++) {
        L.data[i] = i + 1;
    }

    ElemType e;
    int index = 3;  // 获取第3个元素

    if (GetElem(L, index, &e) == OK) {
        printf("Element at position %d is %d\n", index, e);
    } else {
        printf("Error: Invalid index or empty list\n");
    }

    free(L.data);  // 释放分配的内存
    return 0;
}

线性表的顺序存储结构中,存/取数据时,时间复杂度都是 O (1),因为只需要找到对应的下标即可执行操作;而插入/删除时是 O (n),因为要移动每一个元素。