原创 散列表性質與實現

    散列表(Hash table,也叫哈希表),是根據關鍵字(Key value)而直接訪問在內存存儲位置的數據結構。也就是說,它通過把鍵值通過一個函數的計算,映射到表中一個位置來訪問記錄,這加快了查找速度。這個映射函數稱做散列函數,

原创 圖的拓補排序與關鍵路徑

概述        前篇博文講了有環圖的兩種應用:最小生成樹(給出一張地圖,規劃去所有地點的最小代價和以及路線)以及最短路徑(從A點坐地鐵到B點應該如何換乘代價最小),現在來談談無環圖的應用。無環,即是圖中沒有迴路的意思。一個無環的有向圖

原创 圖的存儲結構與遍歷

一、定義         圖(graph)是一種比線性表、樹更爲複雜的數據結構。在線性表中,數據元素之間呈線性關係,即每個元素只有一個直接前驅和一個直接後繼。在樹型結構中,數據元素之間有明顯的的層次關係,即每個結點只有一個直接前驅,但可有

原创 [編程之美] PSet3.9 重建二叉樹

問題描述:        給定前序遍歷和中序遍歷結果,比如:        前序:a b d c e f         中序:d b a e c f        重建這顆二叉樹。 思路:         1.前序遍歷的第一個結點必然是

原创 棧和隊列

 1.棧 (1)後進先出;          實現:棧頂指針指向棧頂元素,插入時先修改指針再插入,刪除時先取棧頂元素再修改指針;          棧頂元素S[S.top],棧底元素S[1];          只能在棧頂上插入和刪除;

原创 二叉搜索樹性質與實現

一、概念        搜索樹支持許多動態集合操作,包括SEARCH、MINIMUM、MAXIMUM、PREDECESSOR、SUCCESSOR、INSERT和DELETE等,因此,一棵搜索樹既可以作爲一個字典又可以作爲一個優先隊列。  

原创 String類的實現

class String { private: char *m_data; public: String(const char *str = NULL);//默認構造函數 String(const String& other);//

原创 線性表性質與實現

一、線性表概述      線性表(亦作順序表)是最基本、最簡單、也是最常用的一種數據結構。線性表中數據元素之間的關係是一對一的關係,即除了第一個和最後一個數據元素之外,其它數據元素都是首尾相接的。      線性表可以說是最簡單的數據結

原创 [編程之美] PSet3.10 分層遍歷二叉樹

問題描述:         1.給定一棵二叉樹,要求分層遍歷二叉樹(從上到下按層次訪問二叉樹,每一層單獨輸出一行),訪問順序爲由左至右。         2.打印二叉樹某層次節點(從左至右),其中根節點爲第0層,函數原型爲int Prin

原创 八大排序算法詳解

說明:本文所用算法示意圖並非原創,多來自網絡。如原創者不同意使用,請與我聯繫。 特別的,多張圖例引用於http://blog.csdn.net/ggxxkkll/article/details/8667429#comments ,非常感謝

原创 基於最大堆實現最大優先隊列

問題描述:       優先隊列(Priority Queue)是一種用來維護一組元素構成的集合S的數據結構,其內每一個元素都有一個相關的值,稱爲關鍵字(key),一個最大優先隊列有着以下操作:          Maxium(s):返回

原创 [算法導論] 遞歸式求解的三種方法

       求解遞歸式,《算法導論》上給出了三種方法,不過對我而言,遞歸樹法和主方法往往更加有效。給出的建議是,先用主方法求解,如果不能使用的情況嘗試用遞歸樹求解,如果還不行只有用代入法。代入法作爲一種求解+證明的方法需要我們猜測解的形

原创 圖的最小生成樹與最短路徑

說明:本文大部分轉自http://blog.chinaunix.net/uid-26548237-id-3834514.html 原創點是自己對該算法的理解,如有錯誤,請不吝指正,謝謝!   概述      圖的最小生成樹與最短路徑沒有

原创 [算法導論] 函數的增長---漸進記號

本文摘自下面鏈接文章的一部分:http://blog.csdn.net/xiazdong/article/details/8491622          對於某個比較簡單的算法,我們有時候確實能夠精確地分析出算法的複雜度,比如算法複雜度

原创 [編程之美] PSet3.11 程序改錯:二分查找與擴展

問題描述:         對於書中提到的二分查找中常見錯誤,見代碼: int binSearch(int num[] ,int val , int begin , int end)//num數組已按照從小到大順序排列 { while