题目来源于王道2018数据结构考研复习指导线性表的综合练习
编译环境:VS2015
题目:从顺序表中删除具有最小值的元素(假设唯一),并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。
具体实现如下:
#include<stdio.h> #include<stdlib.h> #define initSize 50//定义线性表的初始长度 typedef int ElementType; typedef struct { ElementType *data;//顺序表的元素 int length;//当前表的长度 int maxSize;//最大容量 }SeqList;//顺序表的类型定义 //初始化表。构造一个空的线性表 void InitList(SeqList &L) { L.data = (ElementType*)malloc(sizeof(ElementType)*initSize);//分配存储空间 L.length = 0;//设置顺序表的长度为0 L.maxSize = initSize;//设置顺序表的最大容量 } //创建线性表 void CreateList(SeqList &L,int n) { for (int i = 0;i < n;i++) { scanf_s("%d",&(L.data[i])); L.length = n; } } //删除最小值 int RemoveMin(SeqList &L,int &value) { int pos = 0;//记录最小值点的位置 if (L.length == 0) return 0; value = L.data[0]; for (int i = 1;i < L.length;i++) { if (L.data[i] < value) { value = L.data[i]; pos = i; } } L.data[pos] = L.data[L.length - 1]; L.length--; return 1; } //显示列表 void ShowList(SeqList L) { for (int i = 0;i < L.length;i++) { printf_s("%-3d",L.data[i]); } } int main() { int length,min; SeqList L; InitList(L); printf_s("输入表的长度:"); scanf_s("%d",&length); printf_s(" 输入初始值:"); CreateList(L,length); printf_s(" 初始的顺序表的元素如下:"); ShowList(L); RemoveMin(L,min); printf_s(" 删除最小值后的顺序表的元素如下:"); ShowList(L); system("pause"); return 0; }
测试结果截图: