一、问题描述:
从有序顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错误信息并退出运行。
二、算法思想:
有序,如无特殊说明,通常是指“递增有序”。先寻找值大于或等于s的第一个元素(第一个删除的元素),然后寻找值大于t的第一个元素(最后一个删除的元素的下一个元素),要将这段元素删除,只需直接将后面的元素前移。
三、算法代码
bool Del_s_t2(SqList &L,ElemType s,ElemType 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,返回
}
for(j = i;j < L.length && L.data[j] <= t;j++);//寻找值大于t的第一个元素
for(;j < L.length;i++,j++)
{
L.data[i] = L.data[j];//前移,填补被删除元素位置
}
L.length = i;
return true;
}