List::定义
来源:互联网 发布:淘宝视频教程 编辑:程序博客网 时间:2024/05/30 02:22
结点的定义:
typedef int Rank; //秩#define ListNodePosi(T) ListNode<T>* //列表节点位置template <typename T> struct ListNode { //列表节点模板类(以双向链表形式实现)// 成员 T data; ListNodePosi(T) pred; ListNodePosi(T) succ; //数值、前驱、后继// 构造函数 ListNode() {} //针对header和trailer的构造 ListNode( T e, ListNodePosi(T) p = NULL, ListNodePosi(T) s = NULL) : data(e), pred(p), succ(s) {} //默认构造器// 操作接口 ListNodePosi(T) insertAsPred(T const & e); //紧靠当前节点之前插入新节点 ListNodePosi(T) insertAsSucc(T const & e); //紧随当前节点之后插入新节点};
链表的定义(这儿用的是双向链表):
#include "listNode.h" //引入列表节点类template <typename T> class List { //列表模板类private: int _size; ListNodePosi(T) header; ListNodePosi(T) trailer; //规模、头哨兵、尾哨兵protected: void init(); //列表创建时的初始化 int clear(); //清除所有节点 void copyNodes(ListNodePosi(T), int); //复制列表中自位置p起的n项 void merge(ListNodePosi(T)&, int, List<T>&, ListNodePosi(T), int); //有序列表区间归并 void mergeSort(ListNodePosi(T)&, int); //对从p开始连续的n个节点归并排序 void selectionSort(ListNodePosi(T), int); //对从p开始连续的n个节点选择排序 void insertionSort(ListNodePosi(T), int); //对从p开始连续的n个节点插入排序public:// 构造函数 List() { init(); } //默认 List(List<T> const & L); //整体复制列表L List(List<T> const & L, Rank r, int n); //复制列表L中自第r项起的n项 List(ListNodePosi(T) p, int n); //复制列表中自位置p起的n项// 析构函数 ~List(); //释放(包含头、尾哨兵在内的)所有节点// 只读访问接口 Rank size() const { return _size; } //规模 bool empty() const { return _size<=0; } //判空 T& operator[](Rank r) const; //重载,支持循秩访问(效率低) ListNodePosi(T) first() const { return header->succ; } //首节点位置 ListNodePosi(T) last() const { return trailer->pred; } //末节点位置 bool valid(ListNodePosi(T) p) //判断位置p是否对外合法 { return p && (trailer != p) && (header != p); } //将头、尾节点等同于NULL int disordered() const; //判断列表是否已排序 ListNodePosi(T) find(T const & e) const //无序列表查找 { return find(e, _size, trailer); } ListNodePosi(T) find(T const & e, int n, ListNodePosi(T) p) const; //无序区间查找 ListNodePosi(T) search(T const & e) const //有序列表查找 { return search(e, _size, trailer); } ListNodePosi(T) search(T const & e, int n, ListNodePosi(T) p) const; //有序区间查找 ListNodePosi(T) selectMax(ListNodePosi(T) p, int n); //在p及其前n-1个后继中选出最大者 ListNodePosi(T) selectMax() { return selectMax(header->succ, _size); } //整体最大者// 可写访问接口 ListNodePosi(T) insertAsFirst(T const & e); //将e当作首节点插入 ListNodePosi(T) insertAsLast(T const & e); //将e当作末节点插入 ListNodePosi(T) insertBefore(ListNodePosi(T) p, T const & e); //将e当作p的前驱插入 ListNodePosi(T) insertAfter(ListNodePosi(T) p, T const & e); //将e当作p的后继插入 T remove(ListNodePosi(T) p); //删除合法位置p处的节点,返回被删除节点 void merge(List<T>& L) { merge(first(), size, L, L.first(), L._size); } //全列表归并 void sort(ListNodePosi(T) p, int n); //列表区间排序 void sort() { sort(first(), _size); } //列表整体排序 int deduplicate(); //无序去重 int uniquify(); //有序去重 void reverse(); //前后倒置(习题)// 遍历 void traverse(void (*)(T&)); //遍历,依次实施visit操作(函数指针,只读或局部性修改) template <typename VST> //操作器 void traverse(VST&); //遍历,依次实施visit操作(函数对象,可全局性修改)}; //List#include "List_implementation.h"
0 0
- List::定义
- List接口的定义
- Scala List定义
- CSS div 定义的list
- c#如何定义全局变量list
- 链表(list)的宏定义实现
- c# 泛型List的定义、作用、用法
- ContentType大展拳脚——定义List
- string、List<T>之类泛型定义
- C# 泛型List的定义、作用、用法
- C# 泛型List的定义、作用、用法
- IList和List定义的区别
- 成绩表的抽象数据类型定义(ENGLISHSCORE LIST)
- c# 泛型List的定义、作用、用法
- C#/list定义的一些扩展
- 使用List<实体对象>来自定义适配器
- Array、List的定义和操作
- list-style-type:定义列表样式
- Oracle学习笔记(11)----------建表、更新、查询综合练习
- STL 之for_each,transform
- iOS 使用webView实现图文混排
- Android 多进程环境判断当前进程是否是UI进程
- Maximal Rectangle(最大矩阵)
- List::定义
- test_QVariant.cpp
- Redis 性能测试
- MIDI歌曲解析
- STL 之count,count_if,max,max_element,min,min_element和random_shuffle
- Spark学习之14:Spark on Yarn
- php发送微信客服消息
- 讲解c++ shared_ptr很好的资料
- Eclipse中jsp、js文件编辑时,卡死现象解决汇总