欢迎使用CSDN-markdown编辑器

来源:互联网 发布:dokuwiki windows安装 编辑:程序博客网 时间:2024/06/05 22:50
#define Posi(T) listNode<T>*//列表节点位置template <typename T>struct listNode{//列表节点模板类(以双向链表形式实现)T data;//数值Posi(T) pred;//前驱Posi(T) succ;//后继listNode() {}//针对header和trailer的构造listNode(T e,Posi(T) p = NULL,Posi(T) s = NULL):data(e),pred(p),succ(s) {}//默认构造器Posi(T) insertAsPred(T const& e);//前插入posi(T) insertAsSucc(T const& e);//后插入};
  • 列表内容

template int List::deduplicate(){//剔除无序列表中的重复节点
if(_size < 2)return 0;//平凡列表自然无重复
int oldSize = _size;//记录原模板
Posi(T) p = first(); Rank r = 1;//p从首节点起
while ( trailer != ( p = p->succ) ){//依次直到末节点
Posi(T) q = find(p->data, r, p);//在p的r个(真)前驱中,查找与之雷同者
q ? remove(q) : r++;//若的确存在,则删除之;否者秩递增——可否(remove(p))
}//assert:循环过程中的任意时刻,p的所有前驱互不相同
retuen oldSize - _size;//列表规模变化量,即被删除元素总数
}//正确性及效率分析的方法与结论,与Vector::deduplicate()相同

原创粉丝点击