小白算法积累——顺序表4#有序顺序表 +删除某范围内元素

本文介绍了一种在有序顺序表中删除指定范围内元素的算法,包括寻找待删除元素的起始和终止位置,并通过元素前移实现删除。讨论了算法的实现细节及特殊情况处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:从有序顺序表中删除其值在给定值s与t(要求s<t)的所有元素,如果s或t不合理或顺序表为空,则显示出错信息并退出运行。

关键字有序顺序表 删除某范围内的所有元素

思路
关注:因为是有序表,所有删除的元素必然是相连的整体
1.寻找值>=s的第一个元素(第一个将被删除的元素)
需要变量:存储第一个被删元素的下标i

2.寻找>=t的第一个元素(删除截止的元素/最后一个被删除的元素的后一个元素)
需要变量:存储删除截止元素的下标j

3.利用循环遍历,将i和j之间的元素删掉。方法:直接按顺序将截止元素前移,覆盖第一个被删元素,之后依次覆盖即可
#提前考虑特殊情况(出错情况):
如果不存在st之间的元素,则显示出错信息

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,返回错误;以下情况为存在大于s的元素了
for (j=i;j<L.length&&L.data[j]<=t;j++)//寻找值大于等于t的第一个元素(删除截止元素)
for (;j<L.length;j++,i++)// 在截止元素存在的情况下
   L.data[i]=L.data[j];//前移,填补被删元素位置
L.length=i;//i就是最终长度
return true;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值