原创 List::sort排序

template <typename T> void List<T>::sort(ListNodePosi(T) p, int n) { //列表區間排序 switch (rand() % 3) { //隨機選取排序算法。可

原创 GraphMatrix::BFS廣度優先搜索

查找某一結點的鄰居: virtual int firstNbr(int i) { return nextNbr(i, n); } //首個鄰接頂點 virtual int nextNbr(int i, int j) /

原创 List::find、search

無序查找: template <typename T> //在無序列表內節點p(可能是trailer)的n個(真)前驅中,找到等於e的最後者 ListNodePosi(T) List<T>::find(T const& e, in

原创 List::構造、複製構造、析構

構造函數: 默認構造函數: 構造一個空列表: template <typename T> void List<T>::init() { //列表初始化,在創建列表對象時統一調用 header = new ListNode<

原创 Vector::insert remove

首先看看vector不同於數組的一個地方:可以根據數據的多少擴容: 至於這裏爲什麼要是擴充一倍,因爲擴容函數執行也需要時間開銷,當以增加一倍擴容時調用擴容的概率和容量的匹配要更好: template <typename T> v

原创 List::insert remove

各種插入操作: template <typename T> //將e緊靠當前節點之前插入於當前節點所屬列表(設有哨兵頭節點header) ListNodePosi(T) ListNode<T>::insertAsPred(T co

原创 Vector::去重、置亂

無序去重: template <typename T> int Vector<T>::deduplicate() { //刪除無序向量中重複元素(高效版) int oldSize = _size; //記錄原規模 Ra

原创 List::traverse遍歷

聲明: // 遍歷 void traverse(void (*)(T&)); //遍歷,依次實施visit操作(函數指針,只讀或局部性修改) template <typename VST> //操作器 void

原创 Vector::find、search查找

無序向量區間查找: template <typename T> //無序向量的順序查找:返回最後一個元素e的位置;失敗時,返回lo - 1 Rank Vector<T>::find(T const & e, Rank lo, Ra

原创 List::定義

結點的定義: typedef int Rank; //秩 #define ListNodePosi(T) ListNode<T>* //列表節點位置 template <typename T> struct ListNode {

原创 Stack::定義

藉助Vector實現棧,棧頂是向量末尾,棧底是向量起始: #include "../Vector/Vector.h" //以向量爲基類,派生出棧模板類 template <typename T> class Stack: publ

原创 Queue::定義

Queue繼承於List: #include "../List/List.h" //以List爲基類 template <typename T> class Queue: public List<T> { //隊列模板類(繼承Li

原创 BinTree::構造、析構、插入、刪除

構造析構: BinTree() : _size(0), _root(NULL) { } //構造函數 ~BinTree() { if (0 < _size) remove(_root); } //析構函數 插入:

原创 Vector::sort排序

template <typename T> void Vector<T>::sort(Rank lo, Rank hi) { //向量區間[lo, hi)排序 switch (rand() % 5) { //隨機選取排序算法

原创 BinTree::遍歷

template <typename VST> //操作器 void travLevel(VST& visit) { if (_root) _root->travLevel(visit); } //層次遍歷 te