0001 template <typename T> struct Tower; 0002 template <typename T> using TowerPosi = LNP<Tower<T>>; 0003 template <typename T> struct Brick { //砖(塔的每一层) 0004 TowerPosi<T> pred, succ; //前、后相邻的塔 0005 Brick(TowerPosi<T> p = nullptr, TowerPosi<T> s = nullptr) : pred(p), succ(s) {} 0006 }; //Brick 0007 auto key = [](auto t) { return t->data.data; }; //塔对应的关键码 0008 auto tower = [](auto& t) -> auto& { return t->data.tower; }; //塔身 0009 auto height = [](auto t) { return tower(t).size(); }; //塔高 0010 template <typename T> struct Tower { //塔 0011 T data; Vector<Brick<T>> tower; //关键码、塔身(由砖构成的向量) 0012 Tower(T e = T{}): data(e) {} //初建的塔,塔身均为空 0013 }; //Tower 0014 template <typename T> struct Skiplist : public List<Tower<T>> { //跳转表(由塔构成的列表) 0015 TowerPosi<T> _x; //记忆最近接受操作的塔 0016 TowerPosi<T> search(const T&); //查找 0017 TowerPosi<T> insert(const T&); //插入 0018 bool remove(const T&); //删除 0019 }; //Skiplist