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),因为要移动每一个元素。