使用顺序表实现以下操作,要求设计以下菜单,并能够根据菜单提示进行相应的操作,以及能够完成对应的操作。 (1)插入一个新元素到第i个位置。 (2)删除第i个位置的元素。 (3)显示线性表中所有元素的值。 (4)检索表中第i个元素。 (5)求表的长度。
时间: 2024-10-14 16:14:11 浏览: 26
在C语言中,我们可以使用结构体定义一个顺序表(数组),并提供函数来实现上述操作。首先,我们需要定义一个包含所需数据类型的结构体,比如如果我们要存储整数,那么可以这样:
```c
typedef struct {
int data; // 存储元素的数据
int next_index; // 指向前一个元素的位置或数组大小(最后一个元素的next_index为数组大小)
} Node;
```
接下来,创建一个全局变量用于管理顺序表:
```c
Node* list = NULL; // 初始时列表为空
int size = 0; // 当前序列的长度
```
然后实现菜单选项对应的函数:
1. 插入新元素到第i个位置:
```c
void insert(int i, int value) {
if (i < 0 || i > size) {
printf("错误!索引超出范围。\n");
return;
}
Node newNode = {value, i - 1};
if (list == NULL) {
list = &newNode;
} else {
for (int j = list->next_index; j >= i; j--) {
list[j] = list[j - 1];
}
list[i].data = value;
list[i].next_index = i;
}
size++;
}
```
2. 删除第i个位置的元素:
```c
void delete(int i) {
if (i < 0 || i >= size) {
printf("错误!索引超出范围。\n");
return;
}
if (i == 0) {
list = list->next;
} else {
for (int j = i; j < size - 1; j++) {
list[j] = list[j + 1];
}
}
size--;
}
```
3. 显示所有元素:
```c
void display() {
printf("当前顺序表中的元素:\n");
if (list != NULL) {
for (int i = 0; i < size; i++) {
printf("%d ", list[i].data);
}
printf("\n");
} else {
printf("列表为空。\n");
}
}
```
4. 检索第i个元素:
```c
int search(int i) {
if (i < 0 || i >= size) {
printf("错误!索引超出范围。\n");
return -1; // 返回-1表示未找到
}
return list[i].data;
}
```
5. 求表的长度:
```c
int length() {
return size;
}
```
阅读全文