C语言顺序表的建立与操作
时间: 2023-05-29 07:02:51 浏览: 95
C语言顺序表是一种线性数据结构,可以用数组来实现。在C语言中,顺序表可以通过以下步骤进行建立和操作:
1. 定义顺序表结构体
顺序表结构体包含顺序表的元素个数和存储元素的数组。其中,MAXSIZE代表数组的最大容量。
```c
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SeqList;
```
2. 初始化顺序表
初始化顺序表就是将顺序表的长度置为0,表示当前没有元素。
```c
void InitList(SeqList *L) {
L->length = 0;
}
```
3. 插入元素
在顺序表中插入元素需要考虑两个方面:插入位置和插入元素的值。为了保证元素的有序性,可以先将插入位置后的所有元素向后移动一位,然后再将新元素插入到指定位置。
```c
int InsertList(SeqList *L, int pos, int val) {
// 插入位置不合法
if (pos < 1 || pos > L->length + 1) {
return 0;
}
// 顺序表已满
if (L->length == MAXSIZE) {
return 0;
}
// 将pos位置及之后的元素后移一位
for (int i = L->length; i >= pos; i--) {
L->data[i] = L->data[i-1];
}
// 插入新元素
L->data[pos-1] = val;
L->length++;
return 1;
}
```
4. 删除元素
删除元素和插入元素类似,也需要指定删除位置。删除元素后,需要将删除位置后面的元素向前移动一位。
```c
int DeleteList(SeqList *L, int pos) {
// 删除位置不合法
if (pos < 1 || pos > L->length) {
return 0;
}
// 将pos位置及之后的元素前移一位
for (int i = pos; i < L->length; i++) {
L->data[i-1] = L->data[i];
}
L->length--;
return 1;
}
```
5. 查找元素
查找元素需要遍历顺序表中的所有元素,直到找到指定值的元素。
```c
int SearchList(SeqList *L, int val) {
for (int i = 0; i < L->length; i++) {
if (L->data[i] == val) {
return i+1; // 返回元素下标
}
}
return 0; // 没有找到元素
}
```
6. 修改元素
修改元素和查找元素类似,需要先找到指定元素的位置,然后再进行修改。
```c
int UpdateList(SeqList *L, int pos, int val) {
// 修改位置不合法
if (pos < 1 || pos > L->length) {
return 0;
}
L->data[pos-1] = val;
return 1;
}
```
这样,就可以通过以上步骤建立和操作C语言顺序表。可以通过以下代码来测试顺序表的功能:
```c
int main() {
SeqList L;
InitList(&L);
InsertList(&L, 1, 10);
InsertList(&L, 2, 20);
InsertList(&L, 3, 30);
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n"); // 10 20 30
DeleteList(&L, 2);
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n"); // 10 30
int pos = SearchList(&L, 30);
printf("pos: %d\n", pos); // 2
UpdateList(&L, 2, 40);
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n"); // 10 40
return 0;
}
```
阅读全文