C语言实现从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。原最小值空出的位置由最大值填补。
时间: 2024-09-28 10:05:53 浏览: 35
c语言链表的基本操作之合并两个有序链表.zip
在C语言中,我们可以创建一个顺序表(数组或链表),然后通过遍历数组找到最小值,删除它,并更新后续元素来实现这个功能。这里我们假设是一个一维数组的情况。以下是一个简单的示例:
```c
#include <stdio.h>
// 定义顺序表结构(这里简化为数组)
typedef int List[10]; // 假设列表长度为10
// 找到数组中的最小值
int find_min(List arr, int size) {
int min = arr[0];
for (int i = 1; i < size; i++) {
if (arr[i] < min)
min = arr[i];
}
return min;
}
// 删除最小值并将最大值填充其位置
List delete_min_and_replace(List arr, int size) {
int min_val = find_min(arr, size);
for (int i = 0; i < size; i++) {
if (arr[i] == min_val) { // 找到最小值
arr[i] = arr[size - 1]; // 将最大值替换到该位置
size--; // 缩小数组大小
break;
}
}
return arr;
}
// 示例
int main() {
List my_list = {5, 3, 8, 2, 9};
int size = sizeof(my_list) / sizeof(my_list[0]);
printf("Original list: ");
for (int i = 0; i < size; i++)
printf("%d ", my_list[i]);
my_list = delete_min_and_replace(my_list, size);
printf("\nAfter deleting and replacing: ");
for (int i = 0; i < size; i++)
printf("%d ", my_list[i]);
return 0;
}
```
在这个例子中,`delete_min_and_replace`函数会返回一个新的数组,其中包含了所有元素,除了最小值已经被最大值替换的位置。注意这仅适用于已排序的数组,如果数组未排序,你需要先找到最大值再进行操作。
阅读全文