04.从有序顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错信息并退出运行。
在很多教材中指的"有序",如无特别说明,通常是指“递增有序”。注意本题与上题的区别,因为是有序表,所以删除的元素必然是相连的整体。
算法思想:先寻找值大干或等于s的第一个元素(第一个删除的元素),然后寻找值大于t的第一个元素(最后一个删除的元素的下一个元素),要将这段元素删除,只需直接将后面的元素前移。
//线性表04
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,返回
}
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;
}
标签:return,线性表,删除,元素,有序,04
From: https://www.cnblogs.com/bujidao1128/p/17253650.html