帮我用C语言写一个顺序表(能完成基本操作)且带注释
时间: 2023-06-03 20:07:50 浏览: 90
当然,我可以帮您解决这个问题!以下是基本的顺序表的代码实现。
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义最大长度
typedef int ElemType; // 定义元素类型
typedef struct {
ElemType *data; // 存储空间基址(指针)
int length; // 顺序表长度
} SqList; // 顺序表类型定义
// 初始化顺序表
void InitList(SqList *L) {
L->data = (ElemType *)malloc(MAXSIZE * sizeof(ElemType)); // 分配存储空间,data指向这片存储空间
if (! L->data) {
exit(0); // 存储分配失败
}
L->length = 0; // 初始化长度为0
}
// 插入元素
int ListInsert(SqList *L, int i, ElemType e) {
if (i < 1 || i > L->length+1) {
return 0; // i值不合法
}
if (L->length >= MAXSIZE) {
return 0; // 存储空间已满
}
for (int j = L->length; j >= i; j--) {
L->data[j] = L->data[j-1]; // 将第i个元素及之后的元素后移一位
}
L->data[i-1] = e; // 在位置i插入元素e
++L->length; // 长度加1
return 1;
}
// 删除元素
int ListDelete(SqList *L, int i) {
if (i < 1 || i > L->length) {
return 0; // i值不合法
}
for (int j = i; j < L->length; j++) {
L->data[j-1] = L->data[j]; // 将第i个元素及之后的元素前移一位
}
--L->length; // 长度减1
return 1;
}
// 查找元素
int LocateElem(SqList L, ElemType e) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == e) {
return i+1; // 返回元素位置
}
}
return 0; // 没有找到元素e
}
// 输出元素
void printList(SqList L) {
printf("List: [");
for (int i = 0; i < L.length; i++) {
printf("%d", L.data[i]);
if (i < L.length-1) {
printf(", ");
}
}
printf("]\n");
}
int main() {
SqList L;
InitList(&L);
ListInsert(&L, 1, 5);
ListInsert(&L, 1, 4);
ListInsert(&L, 1, 3);
ListInsert(&L, 1, 2);
ListInsert(&L, 1, 1);
printList(L);
ListDelete(&L, 3);
printList(L);
printf("2 is at position %d.\n", LocateElem(L, 2));
return 0;
}
```
以上就是一个基本的顺序表的 C 语言代码实现,其中包含了初始化、插入、删除、查找和输出等操作。
阅读全文