顺序表上基本操作的实现
时间: 2023-09-29 12:03:22 浏览: 42
顺序表是一种基于数组实现的线性表,其基本操作包括以下几个:
1. 初始化操作:初始化一个空的顺序表,即创建一个数组,使其所有元素均为空。
2. 插入操作:在顺序表的指定位置插入一个元素。插入时需要考虑数组是否已满,如果已满需要扩容。
3. 删除操作:从顺序表中删除一个指定位置的元素。删除时需要考虑数组是否已空,如果已空则无法删除。
4. 查找操作:查找指定位置的元素,并返回其值。查找时需要考虑数组是否越界,如果越界则返回错误信息。
下面是基于 C 语言实现的顺序表基本操作代码示例:
```c
#define MAXSIZE 100 // 顺序表最大长度
typedef int ElemType; // 定义元素类型
typedef struct {
ElemType data[MAXSIZE]; // 用数组存储顺序表元素
int length; // 顺序表当前长度
} SqList; // 定义顺序表类型
// 初始化操作
void InitSqList(SqList *L) {
L->length = 0;
}
// 插入操作
int InsertSqList(SqList *L, int i, ElemType e) {
if (L->length == MAXSIZE) {
return 0; // 表示插入失败,顺序表已满
}
if (i < 1 || i > L->length + 1) {
return 0; // 表示插入失败,插入位置不合法
}
for (int j = L->length; j >= i; j--) {
L->data[j] = L->data[j-1]; // 将插入位置之后的元素向后移动一位
}
L->data[i-1] = e; // 将元素 e 插入到指定位置
L->length++; // 长度加 1
return 1; // 表示插入成功
}
// 删除操作
int DeleteSqList(SqList *L, int i) {
if (L->length == 0) {
return 0; // 表示删除失败,顺序表已空
}
if (i < 1 || i > L->length) {
return 0; // 表示删除失败,删除位置不合法
}
for (int j = i; j < L->length; j++) {
L->data[j-1] = L->data[j]; // 将删除位置之后的元素向前移动一位
}
L->length--; // 长度减 1
return 1; // 表示删除成功
}
// 查找操作
int GetElem(SqList *L, int i, ElemType *e) {
if (i < 1 || i > L->length) {
return 0; // 表示查找失败,查找位置不合法
}
*e = L->data[i-1]; // 将指定位置的元素值赋给 e
return 1; // 表示查找成功
}
```