(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)
有序列表并没有很多笔记,于是就愉快的水了一篇,嘿嘿嘿