在顺序表L中开始初始化,输入整数n代表顺序表的长度
输出时若表为空则报出error字样,不为空就输出最小元素的值并输出删除最小值之后的顺序表
样例
#include <bits/stdc++.h> //长度n是从1开始数的,数组位置从0开始数,n-1是出于两者对称
using namespace std;
bool Del_Min(int *L,int n,int& x){ //定义Del_Min存储顺序表,长度,以及会更新的x
if(n==0) return false; //如果长度为0直接false
x=L[0]; //x初始赋值为数组第一个元素,POS用于存储数组某个元素位置
int pos=0; //从数组第二个元素开始遍历,和x也就是第一个元素做对比.
for(int i=1;i<n;i++){ //发现比x值更小的就把它赋给x,并且POS记录这个"弱鸡"的位置
if(L[i]<x){
x=L[i];
pos=i;
}
}
L[pos]=L[n-1]; //整个数组都溜了一圈,用队尾元素值覆盖掉"弱鸡"的值
return true;
}
void travel(int *L,int n){ //定义travel函数,只涉及L表和长度n.
for(int i=0;i<n;i++) printf("%d ",L[i]); //注意这里打印时有个空格要加!!!
printf("\n");
} //对表内元素遍历,并且给每个元素都打印一次
int main(){
int n;
scanf("%d",&n); //主函数定义n,用来接收长度,提前把L表扩到100
int L[100];
for(int i=0;i<n;i++){ //遍历整个数组,接受的元素一个萝卜一个坑填进去
scanf("%d",&L[i]);
}
int Min;
if(Del_Min(L,n,Min)){
printf("%d\n",Min); //如果Del_Min还活着就打印记录的最小元素值
travel(L,n-1); //遍历L表里已经填入的元素们
}else{
printf("error\n"); //该情况是Del_Min嘎了,直接报error
}
}
手撕一个小时 - -(菜就多练
整体思路:
1.先定义一个找出最小元素并把它踢出的函数
2.再做一个遍历打印的函数.
3.主函数只要负责输入的传递,和函数值的引回,(通过引用上面两个函数),就美美解决了