题目描述:
从有序顺序表中删除值在给定s与t之间的所有元素,要求s<t。
算法思想:
算法思想:
【0,1,2,3,4,5,6,7】删除[3,5]之间的即删除元素3,4,5。s为3,t为5。
1.找到与s相等的第一个元素和等于t的第一个元素,记录下标a[3],a[5]
2.往前覆盖元素
3.修改length
核心代码:
int del_s_t(SqList &L,int s,int t)
{
if(L.length==0)
return false;
if(s<L.data[0]||t>L.data[L.length-1]||s>t)
return false;
int left,right;
left=right=0;
for(int i=0;i<L.length;i++)
{
if(L.data[i]<=s)
left=i;
if(L.data[i]<=t)
right=i;
}//此时已经找到等于s的元素的下标和等于t的第一个元素的下标
//【0,1,2,[3[left],4,5[right]],6,7,8】
int j=right+1;
int k=right-left+1;//有没有可能出现k是负数的情况?不可能,因为s<t。
for(int i=left;i<j;i++)
{
L.data[i]=L.data[++right];
}
L.length=L.length-k;
return 0;
}