05.从顺序表中删除其值在给定值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个位置
}
}//for
L.length-=k;//长度减少
return 0;
}
注意:本题也可从后向前扫描顺序表,每遇到一个值在s到t之间的元素,则删除该元素,其后的所有元素全部前移。但移动次数远大于前者,效率不够高。
标签:顺序,线性表,05,ElemType,元素,扫描 From: https://www.cnblogs.com/bujidao1128/p/17255717.html