(1) 用结构体描述一个整数型的顺序表,创建线性表; (2) 在线性表上实现:插入元素、删除元素等基本操作; (3) 编写一个主函数,调试插入、删除操作的实现算法。
时间: 2024-10-28 22:10:02 浏览: 9
实验2第二个程序.zip_线性表的顺序存储实现——归并
(1) 在C语言中,可以使用结构体(struct)来描述一个整数型的顺序表。首先定义一个名为`IntList`的结构体,包含一个整数数组`data`用于存储元素,以及两个成员变量`size`表示当前列表长度和`capacity`表示最大容量:
```c
typedef struct {
int* data; // 存储整数值的数组
int size; // 当前列表长度
int capacity; // 最大容量
} IntList;
```
(2) 线性表的操作包括插入和删除元素。以下是基本实现:
- 插入元素(`insert`):
```c
void insert(IntList* list, int value) {
if (list->size == list->capacity) { // 如果已满
list->capacity *= 2; // 扩容
list->data = realloc(list->data, sizeof(int) * list->capacity); // 重新分配内存
}
list->data[list->size++] = value; // 将值添加到数组末尾并更新大小
}
```
- 删除元素(`delete`,这里假设删除第一个元素):
```c
void delete(IntList* list, int index) {
if (index >= 0 && index < list->size) { // 验证索引
for (int i = index; i < list->size - 1; i++) {
list->data[i] = list->data[i + 1]; // 后面的元素向前移动填补空缺
}
list->size--; // 减少长度
if (list->size < list->capacity / 4) { // 如果空间利用率低,缩小容量
list->capacity = list->size * 2;
list->data = realloc(list->data, sizeof(int) * list->capacity);
}
}
}
```
(3) 主函数示例,测试插入和删除操作:
```c
int main() {
IntList list = {NULL, 0, 5}; // 初始化一个列表
insert(&list, 10); // 插入元素
insert(&list, 20);
printf("After insertion: ");
for (int i = 0; i < list.size; i++)
printf("%d ", list.data[i]);
printf("\n");
delete(&list, 0); // 删除第一个元素
printf("After deletion: ");
for (int i = 0; i < list.size; i++)
printf("%d ", list.data[i]);
printf("\n");
return 0;
}
```
运行这个主函数会先打印出插入后的序列,然后删除第一个元素并再次打印。
阅读全文