考研数据结构(每日一题)
题目:从顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t)的所有元素,如果s或t不合理或顺序表为空,则显示出错信息并退出运行。
算法图解:
算法思想:
扫描顺序表,将s-t之间的数的个数记为k,将不是s-t之间的数向前移动k个单位。
完整代码:
bool Dels_t(SqList &L,Elemtype s, Elemtype t){
//题目中给出要显示出错信息并退出运行,就用bool类型
//需要改变顺序表的结构,所以要加&
int i = 0, k = 0;
//判断s-t是否合理
if(L.length == 0 || s >= t){
return false;
}
for(i = 0; i < L.length; i++){
if(L.data[i] >= s && L.data[i] <=t){ //数值在s-t之间
k++;
}else{
L.data[i-k] = L.data[i]; //将元素向前移动k个单位
i++;
}
}
L.length = L.length - k; //顺序表长度
return true;
}