Tags : Git_Readme
A tiny stl for c++ to memorize data structures and algorithms.
##Vector.h Vector< typename Te>value; ###API
| API | Info |
|---|---|
| size() | return vector's size |
| get(const rank) | return element's value |
| put(const rank,const element) | change element's value |
| insert(const rank,const element) | insert a value |
| remove(const rank) | del |
| disordered() | return ordered or not |
| sort() | quicksort |
| find(const element) | return element with max rank |
| search(const element) | return element LSQ than e with max rank |
| deduplicate() | remove the deduplicate element (disordered vector) |
| uniquify() | remove the deduplicate element(ordered vector) |
| traverse() | traverse the vector and edit every element |
| [],=,==,>,<,>=,<= | operaters |
###Tips:
| Function | Tips |
|---|---|
| extand() | 扩容的条件和方式 |
| shrink() | 注意return的条件 |
| find() | 从后向前 |
| search() fib,bin | Fib类的构造和用法 |
| uniquify() | 注意O(n)复杂度,扫描一遍即可 |
| deduplicate() | 扫描每个元素的前置元素以保证清除彻底 |
| traverse() | 函数指针和函数对象的应用 |
##List.h
List< typename Te>value;
API:
| API | Info |
|---|---|
| Rank size() const | 规模 |
| bool empty() const | 判空 |
| T& operator[] ( Rank r ) const | 重载,支持循秩访问(效率低) |
| ListNodePosi(T) first() const | 首节点位置 |
| ListNodePosi(T) last() const | 末节点位置 |
| bool valid ( ListNodePosi(T) p ) | 判断位置p是否对外合法 |
| bool disordered() const | 判断列表是否已排序 |
| ListNodePosi(T) find ( T const& e ) const | 无序列表查找 |
| ListNodePosi(T) find ( T const& e, int n, ListNodePosi(T) p ) const | 无序区间查找 |
| ListNodePosi(T) search ( T const& e ) const | 有序列表查找 |
| 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) insertA ( ListNodePosi(T) p, T const& e ) | 将e当作p的后继插入 |
| ListNodePosi(T) insertB ( ListNodePosi(T) p, T const& e ) | 将e当作p的前驱插入 |
| ListNodePosi(T) push_back(T const& e) | 将e推入结尾 |
| T remove ( ListNodePosi(T) p ) | 删除合法位置p处的节点,返回被删除节点 |
| void merge ( List& 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操作(函数指针,只读或局部性修改) |
##Stack.h Stack< typename Te>value; *MinStack< typename Te>value; *MaxStack< typename Te>value; *MinQueue< typename Te>value; *MaxQueuek< typename Te>value;
API:
| API | Info |
|---|---|
| bool empty() | return this stack is empty or not |
| int size() | return the size of this stack |
| void push(T const&e) | push an element into stack |
| T pop() | pop an element out of stack |
| T top() | return top element of stack |
| T max() | *return max element of stack |
| T min() | *return min element of stack |
| *in MaxStack.h |
##Queue.h Queue< typename Te>value; API:
| API | Info |
|---|---|
| size() | return _size |
| empty() | return if empty or not |
| void enqueue ( T const& e ) | 入队:尾部插入 |
| T dequeue() | 出队:首部删除 |
| T& front() | 返回队首 |
##BinTree.h
Bintree< typename Te>value;
API:
| API | INFO |
|---|---|
| int size() const | 规模 |
| bool empty() const | 判空 |
| BinNodePosi(T) root() | 树根 |
| BinNodePosi(T) insertAsRoot ( T const& e ) | 插入根节点 |
| BinNodePosi(T) insertAsLC ( BinNodePosi(T) x, T const& e ) | e作为x的左孩子(原无)插入 |
| BinNodePosi(T) insertAsRC ( BinNodePosi(T) x, T const& e ) | e作为x的右孩子(原无)插入 |
| BinNodePosi(T) attachAsLC ( BinNodePosi(T) x, BinTree* &T ) | T作为x左子树接入 |
| BinNodePosi(T) attachAsRC ( BinNodePosi(T) x, BinTree* &T ) | T作为x右子树接入 |
| int remove ( BinNodePosi(T) x ) | 删除以位置x处节点为根的子树,返回该子树原先的规模 |
| BinTree* secede ( BinNodePosi(T) x ) | 将子树x从当前树中摘除,并将其转换为一棵独立子树 |
| void travLevel ( VST& visit ) { if ( _root ) _root->travLevel ( visit ) | 层次遍历 |
| void travPre ( VST& visit ) { if ( _root ) _root->travPre ( visit ) | 先序遍历 |
| oid travIn ( VST& visit ) { if ( _root ) _root->travIn ( visit ) | 中序遍历 |
| void travPost ( VST& visit ) { if ( _root ) _root->travPost ( visit ) | 后序遍历 |
| bool operator < ( BinTree const& t ) | 比较器(==,>,<,>=,<=) |
| void dbgPrint() | 打印二叉树(竖着看) |
###Tips:
| Function | Tips |
|---|---|
| travLevel() | 把每层的节点依次压入队列 |
| travIn() | 不断迭代到左侧最深叶子处(访问),然后返回直接后继(访问),再按本算法处理右子树 |
| travPre() | 不断访问左孩子,把右孩子压入栈中,左侧到底后弹出栈顶,按本算法处理栈顶,直至为空 |
| travPost() | 递归实现 |
##Graph.h GraphList< typename Tv, typename Te >value; GraphMatrix< typename Tv, typename Te >value;
###API:
| API | INFO |
|---|---|
| void BFS ( int, int& ) | (连通域)广度优先搜索算法 |
| void DFS ( int, int& ) | (连通域)深度优先搜索算法 |
| void BCC ( int, int&, Stack& ) | (连通域)基于DFS的双连通分量分解算法 |
| bool TSort ( int, int&, Stack* ) | (连通域)基于DFS的拓扑排序算法 |
| void PFS ( int, PU ) | (连通域)优先级搜索框架 |
| virtual int insert ( Tv const& ) = 0 | 插入顶点,返回编号 |
| virtual Tv remove ( int ) = 0 | 删除顶点及其关联边,返回该顶点信息 |
| virtual Tv& vertex ( int ) = 0 | 顶点v的数据(该顶点的确存在) |
| virtual int inDegree ( int ) = 0 | 顶点v的入度(该顶点的确存在) |
| virtual int outDegree ( int ) = 0 | 顶点v的出度(该顶点的确存在) |
| virtual int firstNbr ( int ) = 0 | 顶点v的首个邻接顶点 |
| virtual int nextNbr ( int, int ) = 0 | 顶点v的(相对于顶点j的)下一邻接顶点 |
| virtual VStatus& status ( int ) = 0 | 顶点v的状态 |
| virtual int& dTime ( int ) = 0 | 顶点v的时间标签dTime |
| virtual int& fTime ( int ) = 0 | 顶点v的时间标签fTime |
| virtual int& parent ( int ) = 0 | 顶点v在遍历树中的父亲 |
| virtual int& priority ( int ) = 0 | 顶点v在遍历树中的优先级数 |
| virtual bool exists ( int, int ) = 0 | 边(v, u)是否存在 |
| virtual void insert ( Te const&, int, int, int ) = 0 | 在顶点v和u之间插入权重为w的边e |
| virtual Te remove ( int, int ) = 0 | 删除顶点v和u之间的边e,返回该边信息 |
| virtual EType& type ( int, int ) = 0 | 边(v, u)的类型 |
| virtual Te& edge ( int, int ) = 0 | 边(v, u)的数据(该边的确存在) |
| virtual int& weight ( int, int ) = 0 | 边(v, u)的权重 |
| void bfs ( int ) | 广度优先搜索算法 |
| void dfs ( int ) | 深度优先搜索算法 |
| void bcc ( int ) | 基于DFS的双连通分量分解算法 |
| Stack* tSort ( int ) | 基于DFS的拓扑排序算法 |
| void prim ( int ) | 最小支撑树Prim算法 |
| void dijkstra ( int ) | 最短路径Dijkstra算法 |
| template void pfs ( int, PU ) | 优先级搜索框架 |
##BSTree.h BSTree < typename T > value; ###API:
| API | INFO |
|---|---|
| virtual BinNodePosi(T) &search(const T&e) | 搜索 |
| virtual BinNodePosi(T) insert(const T&e) | 插入 |
| virtual bool remove(const T&e) | 删除 |
AVLTree < typename T > value;
| API | INFO |
|---|---|
| BinNodePosi(T) insert (const T&e) | 插入 |
| bool remove(const T &e) | 删除 |
##Time.h TIME t1; ###API:
| API | INFO |
|---|---|
| TIME(const TIME &t) | 拷贝构造函数 |
| TIME operator =(const TIME &t) | 等号重载 |
| TIME operator - (const TIME &d) | 减号重载 |
| void print() | 打印时间 |
| void set_time() | 设置时间为当前时间 |
###Ex.
TIME t1,t2,t3;
t1.set_time();
//...comments...
t2.set_time();
t3 = t2 - t1;
t3.print();
###Hashtable.h Hashtable<typename KEY,typename VALUE> ht; ##API:
| API | INFO |
|---|---|
| int size() | return size |
| void insert(KEY,VALUE) | insert elements |
| VALUE find(KEY) | return values |