1)假设有一个顺序表L,其中元素为整数且所有元素值均不相同。设计一个算法将最大值元素与最小值元素交换。并用相关数据进行测试。c语言
时间: 2024-09-25 22:06:24 浏览: 56
在C语言中,我们可以使用两个指针分别指向列表的首尾,然后遍历整个列表找到最大值和最小值,并将它们交换。以下是简单的算法步骤:
```c
#include <stdio.h>
#include <limits.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int findMinMax(int L[], int size, int* min, int* max) {
*min = INT_MAX; // 初始化最小值为最大的负整数
*max = INT_MIN; // 初始化最大值为最大的正整数
for (int i = 0; i < size; i++) {
if (L[i] < *min) { // 如果当前元素比已知最小值小,则更新最小值
*min = L[i];
}
if (L[i] > *max) { // 如果当前元素比已知最大值大,则更新最大值
*max = L[i];
}
}
return 0; // 没有实际返回值,但可以添加一个表示查找完成的标志
}
void exchangeMaxMin(int L[], int size) {
int min, max;
findMinMax(L, size, &min, &max); // 找到最大值和最小值
swap(&L[0], &L[size - 1]); // 交换首尾位置的元素
printf("Original List: ");
for (int i = 0; i < size; i++) {
printf("%d ", L[i]);
}
printf("\nAfter Exchange: ");
swap(&L[0], &L[size - 1]); // 再次交换恢复原状
for (int i = 0; i < size; i++) {
printf("%d ", L[i]);
}
printf("\n");
}
int main() {
int L[] = {5, 2, 9, 1, 7};
int size = sizeof(L) / sizeof(L[0]);
exchangeMaxMin(L, size);
return 0;
}
```
在这个例子中,我们首先定义了一个`findMinMax`函数来寻找列表中的最大值和最小值,然后在`exchangeMaxMin`函数里调用它并交换列表的第一个元素和最后一个元素。在`main`函数中,我们创建了一个示例列表并展示了交换前后的情况。
阅读全文