有序列表的各种处理

1 唯一化

template <typename T> int List<T> :: uniquify(){

if(_size<2) return 0; //平凡列表无重复

int oldSize=_size;

ListNodePosi(T) p=first(); ListNodePosi(T) q; //p为给区段起点,q为后继

while(trailer!=(q=p->succ)) //反复比对紧邻节点(p,q)

if(p->data!=q->data) p=q; 若互异,则转向下一区段

else remove(q); //否则(雷同),删除后者

return oldSize-_size; //列表规模变化量

}

 

2 查找

template <typename T> //在有序列表内节点p(可能是trailer)的n个(真)前驱中,找到不大于e的最后者

ListNodePosi(T) List<T>::search( T const& e,int n,ListNodePosi(T) p) const{

while(0<=n--) //从右向左逐个比较

if(((p=p->pred)->date)<=e) break; //直到命中,数值越界或范围越界

return p; //返回查找终止的位置

} // 失败时,返回区间左边界的前驱(可能时header)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值