-
题目:从顺序表中删除具有最小值的元素(假设唯一),并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并推出运行。
-
解题思路:
- 1、首先这是一个顺序表问题-----------先定义一个动态顺序表
- 2、实现代码的方法部分,这题比较简单,形参第一个为结构体类型的指针,第二个为返回值。
- 3、寻找最小值的方法:先创建一个临时变量,存数组的第一个元素(假设为最小),接着依次比较,最终返回最小值。
- 代码
#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define InitSize 10 //初始化的大小 //定义一个动态顺序表 typedef struct { int* data; int length; int MaxSize; }SeqList; //初始化 bool InitList(SeqList* L) { L->data = (SeqList*)malloc(sizeof(int) * InitSize); //注意,此处开辟的空间是L->data,而非L,因为L不是一个指针 if (L->data == NULL) return false; L->length = 0; L->MaxSize = InitSize; return true; } bool DeleteMinElem(SeqList* L, int* e) { if (L->length == 0) return false; int min = L->data[0]; int pow=0; //记录最小值的下标 for (int i = 1; i < L->length; i++) { if (L->data[i] < min) { min = L->data[i]; pow = i; } } L->data[pow] = L->data[L->length - 1]; L->length--; *e = min; return true; } int main() { SeqList L; //注意,此处创建的是L,而非*L,不要和链表弄混了 InitList(&L); for (int i = 0; i < L.MaxSize; i++) { scanf("%d", &L.data[i]); L.length++; } int e; if (DeleteMinElem(&L, &e)) { printf("程序运行成功,删除的最小元素为%d\n", e); } else { printf("error!"); } for (int i = 0; i < L.length; i++) { printf("%d ", L.data[i]); } return 0; }
欢迎提出建议。
王道数据结构----顺序表部分综合题----01(完整可执行代码)
最新推荐文章于 2024-09-01 10:19:12 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)