编程一个顺序表通常涉及定义顺序表的数据结构、初始化顺序表、插入元素、删除元素、查找元素以及打印顺序表等操作。以下是一个简单的C语言实现顺序表的示例:
定义顺序表结构体
```c
typedef int ElemType;
typedef struct {
ElemType *elem;
int length;
int listsize;
} SqList;
```
初始化顺序表
```c
Status InitList(SqList *L) {
L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (!L->elem) return 0;
L->length = 0;
L->listsize = LIST_INIT_SIZE;
return 1;
}
```
在指定位置插入元素
```c
Status ListInsert(SqList *L, int i, ElemType e) {
if (L->length == L->listsize) {
printf("顺序表已满,不能插入元素!\n");
return 0;
}
if (i < 1 || i > L->length + 1) {
printf("插入位置不合法!\n");
return 0;
}
for (int j = L->length; j >= i; j--) {
L->elem[j] = L->elem[j - 1];
}
L->elem[i - 1] = e;
L->length++;
return 1;
}
```
在指定位置删除元素
```c
Status ListDelete(SqList *L, int i, ElemType *e) {
if (L->length == 0) {
printf("顺序表为空,不能删除元素!\n");
return 0;
}
if (i < 1 || i > L->length) {
printf("删除位置不合法!\n");
return 0;
}
*e = L->elem[i - 1];
for (int j = i - 1; j < L->length - 1; j++) {
L->elem[j] = L->elem[j + 1];
}
L->length--;
return 1;
}
```
打印顺序表
```c
void PrintList(SqList *L) {
for (int i = 1; i <= L->length; i++) {
printf("%d ", L->elem[i - 1]);
}
printf("\n");
}
```
释放顺序表内存
```c
void DestroyList(SqList *L) {
free(L->elem);
L->elem = NULL;
L->length = L->listsize = 0;
}
```
示例使用