一、问题描述:
从顺序表中删除其值在给定值s与t之间(要求s和t,要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错误信息并退出运行。
二、算法思想:
从前向后扫描顺序表L,用k记录下元素值在s到t之间元素的个数(初始时k=0)。对于当前扫描的元素,若其值不在s到t之间,则前移k个位置;否则执行k++。由于这样每个不在s到t之间的元素仅移动一次,因此算法效率高。
三、算法代码:
bool Del_s_t(SqList &L,ElemType s,ElemType t)
//删除顺序表L中值在给定值s与t(要求s<t)之间的所有元素
{
int i,k = 0;
if(L.length == 0 || s >= t)
return false;//线性表为空或s、t不合法,返回
for(i = 0;i < L.length;i++)
{
if(L.data[i] >= s && L.data[i] <= t)
k++;
else
L.data[i - k] = L.data[i];//当前元素前移k个位置
}
L.length -= k;//长度减小
return true;
}