1.题目:
2.题目分析:这是一个类似顺序表遍历的问题(删除最小首先得找到最小,找到最小就得遍历顺序表)
3.解答:(个人解答习惯:结构体+算法思想+代码实现)
(1)结构体和相关定义
//定义顺序表最大长度
#define MAXSIZE 100
//定义单个数据类型
typedef int ElemType;
//自定义bool类型
#define bool char
#define true 1
#define false 0
//定义顺序表的结构体(静态分配)
typedef struct{
ElemType data[MAXSIZE];//用静态数组存放当前数据元素
int length;//顺序表当前长度
}Sqlist;
(2)算法思想:遍历整个顺序表Sqlist,找出最小值元素的位置,用一个变量x收集该元素位序,搜索结束用最后一个元素data[L.length-1]的值覆盖data[x]的位置,然后把最后一个元素删除(顺序表长度减一)。
(3)代码实现:
bool del_x(Sqlist &L,ElemType &e){
//1.判断操作位置的合法性:顺序表为空就不合法
if(L->length<=0){
printf("当前顺序表为空,删除操作不合法!);
return false;
}
int i,x;//设置一个用于返回最小元素位序的变量x
e=L.data[0];//将L中的第一个元素的值赋给e
//2.遍历顺序表L
for(i=0;i<L->length;i++){
//如果下一个元素比e小就将下一个元素的值赋给e
if(L.data[i]<e){
e=L->data[i];
x=i;//一直循环直到找到最小元素,将其位序给x
}
L.data[x]=L.data[L.length-1];//最后一个元素的值覆盖最小元素data[x]
L.length--;//删除最后一个元素,顺序表长度减1
return true;
}