用C语言写出这段代码:输入一串顺序表,长度为4,删除第3个元素
时间: 2024-10-21 21:01:56 浏览: 17
在C语言中,如果你有一个动态分配的顺序表(数组),并且你想删除第三个元素,你需要确保数组有至少四个元素,因为索引是从0开始计数的。以下是一个简单的示例,展示了如何删除一个顺序表中的第三个元素:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 4
// 定义结构体表示顺序表中的元素
typedef struct {
int data;
} Element;
// 动态分配顺序表
Element* create_array(int size) {
Element* array = (Element*)malloc(size * sizeof(Element));
return array;
}
// 删除指定位置的元素并移动其他元素
void delete_element(Element** arr, int index) {
if (*arr == NULL || index < 0 || index >= MAX_SIZE) {
printf("Invalid operation! Array is empty or index out of bounds.\n");
return;
}
// 如果要删除的是最后一个元素,直接减小大小并返回
if (index == MAX_SIZE - 1) {
free(*arr);
*arr = NULL;
return;
}
// 移动数组中的所有元素到删除位置之后
for (int i = index; i < MAX_SIZE - 1; i++) {
(*arr)[i] = (*arr)[i + 1];
}
// 减少数组的实际大小
free((*arr)[MAX_SIZE - 1]);
(*arr)[MAX_SIZE - 1] = NULL;
}
int main() {
Element* list = create_array(MAX_SIZE); // 创建包含4个元素的列表
for (int i = 0; i < MAX_SIZE; i++) {
printf("Enter element %d: ", i);
scanf("%d", &list[i].data);
}
printf("\nOriginal list: ");
for (int i = 0; i < MAX_SIZE; i++) {
printf("%d ", list[i].data);
}
delete_element(&list, 2); // 删除索引为2的元素(实际上是第3个)
printf("\nAfter deletion: ");
for (int i = 0; i < MAX_SIZE; i++) {
if (list[i].data != NULL) {
printf("%d ", list[i].data);
} else {
printf("(deleted)\n");
}
}
free(list); // 不要忘记释放内存
return 0;
}
```
运行这段代码时,请确保按照提示输入值,然后程序会删除第3个元素并显示修改后的列表。
阅读全文