从顺序表表中删除具有最小值的元素(假设不唯一),并由函数返回被删元素值
空出的位置由最后一个元素填补,若顺序表为空,则显示出错误信息并退出运行
//顺序表定义及初始化
#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-1
for (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,10
printf("初始顺序表为:");
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;
}