题目:
从有序顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t)的所有元素,如果s或t不合理或顺序表为空,则显示出错信息并退出程序
算法思想:
第一步:搜索顺序表,查找删除的第一个元素(第一个=s的元素)纪录其位置为i,并且查找删除的最后一个元素的下一个元素(第一个>t的元素)纪录其位置为j
第二步:从位置i,j开始,循环,每次都将位置j上的元素前移到位置i上
第三步:顺序表的长度变为i
代码:
bool Del_s_t(Sqlist &L,ElemType s,ElemType t)
{
//删除有序顺序表中值在给定值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的元素位置
for (i >= L.length)
return false; //所有的元素都小于s,s不合理,显示出错信息false,并返回
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;
}