题目:从有序顺序表中删除其值在给定值s与t(要求s<t)的所有元素,如果s或t不合理或顺序表为空,则显示出错信息并退出运行。
关键字有序顺序表 删除某范围内的所有元素
思路
关注:因为是有序表,所有删除的元素必然是相连的整体
1.寻找值>=s的第一个元素(第一个将被删除的元素)
需要变量:存储第一个被删元素的下标i
2.寻找>=t的第一个元素(删除截止的元素/最后一个被删除的元素的后一个元素)
需要变量:存储删除截止元素的下标j
3.利用循环遍历,将i和j之间的元素删掉。方法:直接按顺序将截止元素前移,覆盖第一个被删元素,之后依次覆盖即可
#提前考虑特殊情况(出错情况):
如果不存在st之间的元素,则显示出错信息
bool Del_s_t2(SqList&L,ElemType s,ElemType t){
//删除有序顺序表L中值在 给定值s 和t之间所有元素
int i,j;
if (s>=t||L.length==0)
return false;
for(i=0;i<L.length&&L.data[i]<s;i++)//寻找值大于等于s的第一个元素
if (i>=L.length)
return false;//所有元素值均小于s,返回错误;以下情况为存在大于s的元素了
for (j=i;j<L.length&&L.data[j]<=t;j++)//寻找值大于等于t的第一个元素(删除截止元素)
for (;j<L.length;j++,i++)// 在截止元素存在的情况下
L.data[i]=L.data[j];//前移,填补被删元素位置
L.length=i;//i就是最终长度
return true;
}