问题
从表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值
空出的一个位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行
#include<bits/stdc++.h>
using namespace std;
#define Max 50
struct SqList{
int a[Max] = {2,3,4,6,5,6,1,3};
int length = 8;
};
bool listdelete(SqList &s,int &ele)
{
if(s.length == 0)
return false;
int minn = s.a[0];
int flag = 0;
for(int i = 1;i < s.length;i++)
{
if(s.a[i]<minn)
{
minn = s.a[i];
flag = i;
}
}
ele = s.a[flag];//把最小元素带出去
s.a[flag] = s.a[s.length-1];//空出的一个位置由最后一个元素填补
return true;
}
int main()
{
SqList s;
int k = 0;//初始化
if(listdelete(s,k))
{
cout<<"最小元素k="<<k<<endl;
for(int i = 0;i<s.length;i++)
{
cout<<s.a[i]<<" ";
}
cout<<endl;
}else
{
cout<<"错误"<<endl;
}
return 0;
}
//删除最小值,空出的位置由最后一个元素填补
#include<bits/stdc++.h>
using namespace std;
#define NUM 20
int main(){
int a[NUM];
int length=0;
cout<<"请输入一串数字以-1结束:";
while(1){
cin>>a[length];
length++;
if(a[length-1]==-1||length>NUM) break;
}
length=length-1;//把没用的-1去掉
for(int i=0;i<length;i++){
cout<<a[i]<<" ";
}
cout<<endl;
//找最小值
int minn=a[0];
int flag=0;
for(int i=0;i<length;i++){
if(a[i]<minn){
minn=a[i];
flag=i;
}
}
cout<<"最小元素为:"<<minn<<endl;
cout<<"flag="<<flag<<endl;
a[flag]=a[length-1];//把最后一个元素放在最小元素位置上
for(int i=0;i<length;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}