0001 #include "QuadlistNode.h" //引入Quadlist节点类 0002 template <typename T> class Quadlist { //Quadlist模板类 0003 private: 0004 int _size; QlistNodePosi(T) header; QlistNodePosi(T) trailer; //规模、头哨兵、尾哨兵 0005 protected: 0006 void init(); //Quadlist创建时的初始化 0007 int clear(); //清除所有节点 0008 public: 0009 // 构造函数 0010 Quadlist() { init(); } //默认 0011 // 析构函数 0012 ~Quadlist() { clear(); delete header; delete trailer; } //删除所有节点,释放哨兵 0013 // 只读访问接口 0014 Rank size() const { return _size; } //规模 0015 bool empty() const { return _size <= 0; } //判空 0016 QlistNodePosi(T) first() const { return header->succ; } //首节点位置 0017 QlistNodePosi(T) last() const { return trailer->pred; } //末节点位置 0018 bool valid ( QlistNodePosi(T) p ) //判断位置p是否对外合法 0019 { return p && ( trailer != p ) && ( header != p ); } 0020 // 可写访问接口 0021 T remove ( QlistNodePosi(T) p ); //删除(合法)位置p处的节点,返回被删除节点的数值 0022 QlistNodePosi(T) //将*e作为p的后继、b的上邻插入 0023 insertAfterAbove ( T const& e, QlistNodePosi(T) p, QlistNodePosi(T) b = NULL ); 0024 // 遍历 0025 void traverse ( void (* ) ( T& ) ); //遍历各节点,依次实施指定操作(函数指针,只读或局部修改) 0026 template <typename VST> //操作器 0027 void traverse ( VST& ); //遍历各节点,依次实施指定操作(函数对象,可全局性修改节点) 0028 }; //Quadlist