帮我写一段C语言程序,内容是:顺序表的插入、删除操作 在已经创建的顺序表:2023040907018中插入或删除一个元素。从键盘读入元素值和插入位置,在指定的位置插入;从键盘读入欲删除的元素位置,在指定的位置删除元素。
时间: 2024-10-29 08:25:06 浏览: 17
以下是C语言中实现顺序表插入和删除操作的一个简单示例。这里我们假设顺序表是一个动态数组,包含整数,并使用结构体表示顺序表。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表结构体
typedef struct {
int* data;
int size;
int capacity;
} List;
// 动态内存分配和释放函数
void create(List* list) {
list->data = (int*)malloc(sizeof(int));
list->size = 0;
list->capacity = 1;
}
void resize(List* list, int new_capacity) {
int* newData = (int*)realloc(list->data, sizeof(int) * new_capacity);
if (!newData) {
printf("Memory allocation failed.\n");
exit(1);
}
list->data = newData;
list->capacity = new_capacity;
}
// 插入元素到列表的特定位置
void insert_at(List* list, int value, int index) {
if (index > list->size || index < 0) {
printf("Invalid insertion position.\n");
return;
}
// 如果需要扩容,先调整容量
if (list->size + 1 >= list->capacity) {
resize(list, list->capacity * 2);
}
memmove(&list->data[index+1], &list->data[index], sizeof(int) * (list->size - index));
list->data[index] = value;
list->size++;
}
// 删除列表中的元素
void delete_at(List* list, int index) {
if (index >= list->size || index < 0) {
printf("Invalid deletion position.\n");
return;
}
memmove(&list->data[index], &list->data[index+1], sizeof(int) * (list->size - index - 1));
list->size--;
// 缩容处理,如果删除后的大小小于一半则缩小容量
if (list->size <= list->capacity / 2 && list->size != 0) {
resize(list, list->size);
}
}
int main() {
List studentList;
create(&studentList);
int num, pos;
printf("Enter an integer to be inserted or 0 for deleting:\n");
scanf("%d", &num);
while (1) {
printf("Insertion (enter a number and position): ");
scanf("%d %d", &pos, &num);
if (num == 0) break; // 用户选择删除
insert_at(&studentList, num, pos); // 插入元素
printf("Element inserted at position %d successfully.\n", pos);
}
printf("Deletion (enter position): ");
scanf("%d", &pos);
if (pos >= 0 && pos < studentList.size) {
delete_at(&studentList, pos); // 删除元素
printf("Element deleted from position %d successfully.\n", pos);
} else {
printf("Invalid deletion position.\n");
}
free(studentList.data);
return 0;
}
```
这个程序首先创建一个空的顺序表,然后提示用户输入插入或删除的操作。用户可以选择插入一个整数并提供位置,或者删除一个已存在的元素。注意这个程序没有处理异常情况,例如当用户输入非法数据时,实际项目中应增加错误检查和处理。
阅读全文