线性表综合应用题1
-
从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。
算法思想:搜索整个顺序表,查找最小值元素并记住其位置,搜索结束后用最后一个元素填补空出的原最小值元素的位置。
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #define MaxSize 10 //定义顺序表结构 typedef struct { int data[MaxSize]; int length; }SqList; //初始化一个顺序表 void InitList(SqList& L) { L.length = 0; int num; for (int i = 0; i < MaxSize; i++) { printf("请输入:"); scanf("%d", &num); if (num == -1) { break; } L.data[i] = num; L.length++; } } bool DeleteMin(SqList& L, int& s) { //删除顺序表L中最小值元素结点,并通过引用型参数s返回值 if (L.length == 0) return false;//判断表是否为空 s = L.data[0];//将表中的第一个值给s,假定她最小,然后一次比较 int locate = 0;//使用locate记录最小值的下标 for(int i=1;i<L.length;i++) if (L.data[i] < s) { s = L.data[i]; locate = i; } L.data[locate] = L.data[L.length - 1];//空出的位置由最后一个元素填补 L.length--; return true; } int main() { SqList L; InitList(L); int re = 0; printf("%d\n",L.length); for (int i = 0; i < L.length; i++) { printf("%d\t",L.data[i]); } printf("\n"); DeleteMin(L, re); printf("当前顺序表中最小的元素为:%d",re); return 0; }