用c语言编写程序:从顺序表中删除具有最小值的元素(假设唯一)并由函数返回删除元素的值;空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。
时间: 2024-09-25 08:10:43 浏览: 73
在C语言中,你可以创建一个顺序表结构体,并提供一个函数来执行这个操作。首先,我们定义一个结构体表示顺序表,包括一个数组和两个指针来跟踪表的开始和结束:
```c
typedef struct {
int* elements;
int size;
int capacity;
} SequenceList;
// 函数原型声明
int deleteMinElement(SequenceList* list);
```
接下来,我们实现`deleteMinElement`函数:
```c
int deleteMinElement(SequenceList* list) {
if (list->size == 0) { // 判断列表是否为空
printf("Error: List is empty.\n");
exit(EXIT_FAILURE); // 空列表时退出运行
}
// 如果只有一个元素,直接返回并更新大小
if (list->size == 1) {
int value = list->elements[0];
free(list->elements);
list->elements = NULL;
list->size = 0;
list->capacity = 0;
return value;
}
int minIndex = 0;
for (int i = 1; i < list->size; i++) {
if (list->elements[i] < list->elements[minIndex]) {
minIndex = i;
}
}
// 删除最小元素并移动其他元素
int minValue = list->elements[minIndex];
for (int i = minIndex; i < list->size - 1; i++) {
list->elements[i] = list->elements[i + 1];
}
list->size--;
// 更新最后一个元素作为新最小值
list->elements[list->size] = minValue;
return minValue;
}
```
此函数首先检查列表是否为空,然后找到最小值的索引。接着逐个将剩余元素向左移动一位,同时更新`size`和最后保存最小值。
阅读全文