题目描述:
从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。
题目分析:
1、找出最小值
2、删除最小值
3、返回被删的最小值
4、空位由最后一个元素填补
5、异常情况:删除最小元素后,顺序表为空,显示出错信息并退出运行
程序代码:
#include<stdio.h>
#define MaxSize 10
typedef struct{
int data[MaxSize];
int length;
} SqList;
void InitList(SqList &L)
{
L.length = 0;
}
//计算最小值
int GetMin(SqList L, int &min)
{
int min = L.data[0];
for (int i = 1; i <= L.length - 1; i++)
{
if (L.data[i] < min)
{
min = L.data[i];
}
}
return min;
}
//查找最小值
int LocateElem(SqList L, int min)
{
for (int i = 0; i <= L.length - 1; i++)
{
if (L.data[i] == min)
{
return i+1;
}
}
}
//删除最小值
bool ListDelete(SqList &L, int i, int &e)
{
if (i < 1 || i > L.length)
{
return false;
}
e = L.data[i-1];
L.data[i-1] = L.data[L.length-1];
L.length--;
if (L.length == 0)
{
print("The List is Empty, Err");
return 0;
}
return true;
}
int main()
{
SqList L;
InitList(L);
int min = 0;
LocateElem(L, min);
int e = -1;
ListDelete(L, min, e);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 10
typedef struct{
int data[MaxSize];
int length;
} SqList;
void InitList(SqList &L)
{
L.length = 0;
}
bool DelMin(SqList &L, int &min)
{
if (L.length <= 0)
{
printf("The SqList is empty, Err.");
return false;
}
int min = L.data[0];
int pos = 0;
for (int i = 1; i < L.length; i++)
{
if (L.data[i] < min)
{
min = L.data[i];
pos = i;
}
}
L.data[pos] = L.data[L.length - 1];
L.length--;
return true;
}