针对有序列表的操作

(1)查找

在有序列表的 n 个前驱中,找到不大于 e 的最后一个元素

template <typename T>
Posi(T) List<T>::search(T const & e,int n,Posi(T) p) const{
        while(0 <= n--)
              if( (p = p->pred) ->data) <= e )
                 return p;
        return ;
       }
// n 可以 等于 0

//从 后向前找 不大于

复杂度分析:

最坏情况 O(n),不像向量可以在常数时间内找到

向量是 RAM 模型,而列表是 TM 模型,需要步骤

(2)唯一化

template <typename T>
int List<T>::uniquify(){
    if(_size < 2)
       return ;
    int oldsize = _size;
    ListNodePosi(T) p = first(); //定义 p,q类型
    ListNodePosi(T) q;
    while(trailer != p->succ)
          q = p->succ;
          if(p->data == q->data)
             remove(q);
          else
             p = q;
    return oldsize - _size;
 //总算有写的差不多了一次23333
 
 //要记得无需比较的特殊情况
 
 //remove()是常数时间,所以时间复杂度 O(n)

有序列表并没有很多笔记,于是就愉快的水了一篇,嘿嘿嘿

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值