从顺序表表中删除具有最小值的元素(假设不唯一),并由函数返回被删元素值
空出的位置由最后一个元素填补,若顺序表为空,则显示出错误信息并退出运行
//顺序表定义及初始化
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MaxSize 10//定义最大长度int InitArr[10] = { 3,9,2,5,4,8,6,1,7,10 };typedef struct {int data[MaxSize];//用静态的数据存放数据元素int length;//顺序表当前长度
}Sqlist;//顺序表的类型定义//初始化一个顺序表
void InitList(Sqlist* L)
{for (int i = 0;i < MaxSize;i++){L->data[i] = InitArr[i];//将所有数据元素设置为默认初始值}L->length = 10;//顺序表初始长度为0
}
//从顺序表表中删除具有最小值的元素(假设不唯一),并由函数返回被删元素值
//空出的位置由最后一个元素填补,若顺序表为空,则显示出错误信息并退出运行int del_min(Sqlist* L) {int i = 0;int min = (*L).data[i];//标记最小元素int index = 0;//标记最小元素下标//找最小元素位置for (i = 0;i < (*L).length;i++) {if ((*L).data[i] < min) {min = (*L).data[i];index = i;}}//删最小元素——即把最小元素后面的元素前移,length-1for (i = index;i < (*L).length-1;i++) {(*L).data[i] = (*L).data[i + 1];}(*L).length--;return min;
}
int main()
{Sqlist L;InitList(&L);//初始化一个顺序表:3,9,2,5,4,8,6,1,7,10printf("初始顺序表为:");print(&L);printf("\n");int min = del_min(&L);printf("进行一次最小元素的删除,被删元素为:%d",min);printf("删除后顺序表为:");print(&L);printf("\n");min = del_min(&L);printf("进行两次最小元素的删除,被删元素为:%d", min);printf("删除后顺序表为:");print(&L);return 0;
}