目录
1. 头文件
1.1 词典头文件
template <typename K, typename V> struct Dictionary { //词典Dictionary模板类
virtual int size() const = 0; //当前词条总数
virtual bool put(K, V) = 0; //插入词条(禁止雷同词条时可能失败)
virtual V* get(K k) = 0; //读取词条
virtual bool remove(K k) = 0; //删除词条
};
1.2 词条头文件
//词条模板类
template <typename K, typename V> struct Entry {
K key; V value; //关键码、数值
Entry(K k = K(), V v = V()) : key(k), value(v) {}; //默认构造函数
Entry(Entry<K, V> const& e) : key(e.key), value(e.value) {}; //基于克隆的构造函数
bool operator< (Entry<K, V> const& e) { return key < e.key; } //比较器:小于
bool operator> (Entry<K, V> const& e) { return key > e.key; } //比较器:大于
bool operator== (Entry<K, V> const& e) { return key == e.key; } //判等器:等于
bool operator!= (Entry<K, V> const& e) { return key != e.key; } //判等器:不等于
}; //得益于比较器和判等器,从此往后,不必严格区分词条及其对应的关键码
1.3 列表头文件
请点击
C++ 数据结构学习 ---- 列表_孤城寻欢的博客-优快云博客_c++列表
1.4 四链表头文件
#include "QuadListNode.h" //引入Quadlist节点类
template <typename T> struct Quadlist { //四联列表
int _size; //规模
QNodePosi<T> header, trailer; //头哨兵、尾哨兵
void init(); //初始化
int clear(); //清除所有节点
Quadlist() { init(); } //构造
~Quadlist() { clear(); delete header; delete trailer; } //析构
T remove(QNodePosi<T> p); //删除(合法)位置p处的节点,返回被删除节点的数值
QNodePosi<T> insert(T const& e, QNodePosi<T> p, QNodePosi<T> b = NULL); //将e作为p的后继、b的上邻插入
void traverse(void (*) (T&)); //遍历各节点,依次实施指定操作(函数指针,只读或局部修改)
template <typename VST> void traverse(VST&); //遍历
}; //Quadlist
//Quadlist初始化,创建Quadlist对象时统一调用
template <typename T> void Quadlist<T>::init() {
header = new QNode<T>; //创建头哨兵节点
trailer = new QNode<T>; //创建尾哨兵节点
header->succ = trailer; header->pred = NULL; //沿横向联接哨兵
trailer->pred = header; trailer->succ = NULL; //沿横向联接哨兵
header->above = trailer->above = NULL; //纵向的后继置空
header->below = trailer->below = NULL; //纵向的前驱置空
_size = 0; //记录规模
} //如此构造的四联表,不含任何实质的节点,且暂时与其它四联表相互独立
//将e作为