#include<stdio.h> #include<stdlib.h> #define MAX 100 typedef int ElemType; //顺序表结构定义 typedef struct SXList { ElemType *elem; //用于存储表中的元素 int len; //顺序表的长度 int Size; //顺序表的容量 }List; //初始化顺序表 List * InitList() { List *L = (List *)malloc(sizeof(List)); if(L == NULL) return NULL; L->len = 0; L->Size = MAX; L->elem = (ElemType *)malloc(MAX*sizeof(ElemType)); if(L->elem == NULL ) { free(L); return NULL; } else return L; } // 创建线性表 void CreateList(List *L) { int m,i; printf("请输入元素个数及元素:\n"); scanf("%d",&m); /*******begin*******/ /*******end*******/ } // 获取最大最小元素的下标 // maxi 和 mini分别用于记录顺序表中最大元素和最小元素的下标 void FindMaxMin(List *L, int &maxi,int &mini) { /*******begin*******/ /*******end*******/ } // 交换顺序表最大最小元素的位置 // maxi 和 mini分别用于记录顺序表中最大元素和最小元素的下标 void swapMaxMin(List *L,int maxi,int mini) { /*******begin*******/ /*******end*******/ } //打印顺序表所有元素 void disp(List *L) { int i; for(i = 0 ; i < L->len ; i++) { printf("%d
时间: 2025-05-23 22:10:23 浏览: 20
### C语言顺序表实现
以下是基于用户需求的C语言代码实现,涵盖了创建线性表、获取最大最小元素下标的逻辑以及交换最大最小元素位置的功能。
#### 创建线性表
通过动态内存分配的方式初始化线性表,并设置其初始状态为空[^3]。
```c
#include <stdio.h>
#include <stdlib.h>
#define INIT_SIZE 100 // 初始容量
typedef struct SqList {
int *array; // 动态数组指针
size_t size; // 当前有效数据数量
size_t capacity; // 总容量
} SqList;
// 初始化顺序表
void init_list(SqList *list) {
list->array = (int *)malloc(sizeof(int) * INIT_SIZE);
if (!list->array) {
printf("Memory allocation failed!\n");
exit(-1);
}
list->size = 0;
list->capacity = INIT_SIZE;
}
```
---
#### 获取最大最小元素及其下标
遍历整个线性表中的元素,记录最大值和最小值对应的索引位置[^4]。
```c
// 查找最大值和最小值的下标
void find_max_min_index(const SqList *list, int *max_idx, int *min_idx) {
if (list->size == 0) {
printf("The list is empty.\n");
*max_idx = -1;
*min_idx = -1;
return;
}
int max_val = list->array[0];
int min_val = list->array[0];
*max_idx = 0;
*min_idx = 0;
for (size_t i = 1; i < list->size; ++i) {
if (list->array[i] > max_val) {
max_val = list->array[i];
*max_idx = i;
}
if (list->array[i] < min_val) {
min_val = list->array[i];
*min_idx = i;
}
}
}
```
---
#### 交换最大最小元素的位置
利用临时变量完成两个指定位置上的数值互换操作[^5]。
```c
// 交换最大值和最小值的位置
void swap_max_min(SqList *list, int max_idx, int min_idx) {
if (max_idx == -1 || min_idx == -1) {
printf("Cannot perform the operation due to invalid indices.\n");
return;
}
if (max_idx != min_idx && list->size >= 2) {
int temp = list->array[max_idx];
list->array[max_idx] = list->array[min_idx];
list->array[min_idx] = temp;
}
}
```
---
#### 测试函数
提供一个完整的测试场景来验证以上功能是否正常工作。
```c
int main() {
SqList my_list;
init_list(&my_list);
// 插入一些数据到列表中
const int data[] = {8, 3, 7, 9, 2};
for (size_t i = 0; i < sizeof(data)/sizeof(data[0]); ++i) {
my_list.array[my_list.size++] = data[i];
}
// 打印原始列表
printf("Original List: ");
for (size_t i = 0; i < my_list.size; ++i) {
printf("%d ", my_list.array[i]);
}
printf("\n");
// 寻找最大值和最小值的下标
int max_idx, min_idx;
find_max_min_index(&my_list, &max_idx, &min_idx);
printf("Max Index: %d, Min Index: %d\n", max_idx, min_idx);
// 交换最大值和最小值的位置
swap_max_min(&my_list, max_idx, min_idx);
// 打印修改后的列表
printf("Modified List: ");
for (size_t i = 0; i < my_list.size; ++i) {
printf("%d ", my_list.array[i]);
}
printf("\n");
free(my_list.array); // 释放动态分配的内存
return 0;
}
```
---
### 输出示例
假设输入的数据为 `{8, 3, 7, 9, 2}`,程序运行结果如下:
```
Original List: 8 3 7 9 2
Max Index: 3, Min Index: 4
Modified List: 8 3 7 2 9
```
---
阅读全文
相关推荐














