题目
从顺序表中具有最小值的元素(假设唯一)并由函数返回被删元素的值,空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。
代码
#include <stdio.h>
#define MaxSize 10
typedef struct {
int data[MaxSize];
int length;
}Sqlist;
/**
* 初始化静态表
* @param L
*/
void InitList(Sqlist &L) {
for (int i = 0; i < MaxSize; i++) {
L.data[i] = 0;
L.length = 0;
}
}
/**
* 向列表增加元素
* @param L 表的引用
* @param i 位序
* @param e 元素
* @return
*/
bool ListInsert(Sqlist &L,int i,int e){
if(i<1||i>L.length+1){
return false;
}
if(L.length>=MaxSize) return false;
for (int j = L.length; j >= i; j--) {
L.data[j]=L.data[j-1];
}
L.data[i-1] = e;
L.length++;
return true;
}
/**
* 删除表的一个元素
* @param L 表的引用
* @param i 位序
* @param e 返回删除的元素
* @return
*/
bool ListDelete(Sqlist &L,int i,int &e){
if(i<1||i>L.length+1){
return false;
}
e=L.data[i-1];
for(int j=i;j<L.length;j++){
L.data[j-1]=L.data[j];
}
L.length--;
return true;
}
/**
* 根据位序来获取元素
* @param L 表的引用
* @param i 位序
* @return
*/
int GetElem(Sqlist &L,int i){
if(i<1||i>L.length+1){
return -1;
}
return L.data[i-1];
}
/**
* 根据元素来查找最靠前的位序
* @param L
* @param e
* @return
*/
int LocationElem(Sqlist &L,int e){
for (int i = 0; i < L.length; i++) {
if(L.data[i] == e)
return i+1;
}
return 0;
}
bool del_min(Sqlist &L,int &x){
int temp = GetElem(L,1);//temp用来做数值比较
int index = 1;//用来记录最小值位序
if(L.length == 0){
printf_s("您输入的顺序表为空,请重新输入");
return false;
}
for (int i = 1; i < L.length+1; ++i) {
if(temp > GetElem(L,i)){
temp = GetElem(L,i);
index = i;
}
}
x = L.data[index-1];
L.data[index-1] = L.data[L.length-1];
L.length--;
}
int main()
{
Sqlist L;
int e;
InitList(L);
ListInsert(L,1,4);
ListInsert(L,1,3);
ListInsert(L,1,2);
ListInsert(L,1,1);
printf_s("原数据为");
for (int i = 1; i < L.length+1; ++i) {
printf_s("%d",GetElem(L,i));
}
del_min(L,e);
printf_s("\n删除的数据为");
printf_s("%d\n",e);
printf_s("删除后的数据为");
for (int i = 1; i < L.length+1; ++i) {
printf_s("%d",GetElem(L,i));
}
return 0;
}