1. 程式人生 > >讀書:大話資料結構

讀書:大話資料結構

第1 章資料結構緒論

資料結構;
是相互之間存在一種或多種特定關係的資料元素的集合。

資料:

是描述客觀事物的符號,是計算機中可以操作的物件,是能被計算機識別,並輸入給計算機處理的符號集合。資料不僅僅包括整型、實型等數值型別,還包括字元及聲音、影象、視訊等非數值型別。

邏輯結構與物理結構

邏輯結構:是指資料物件中資料元素之間的相互關係。

集合,線性,樹形,圖形

物理結構:是指資料的邏輯結構在計算機中的儲存形式。

順序儲存結構,鏈式儲存結構

第2 章演算法

演算法:
演算法是解決特定問題求解步驟的描述, 在計算機中表現為指令的有限序列, 並且
每條指令表示一個或多個操作。

判斷演算法的效率時,函式中的常數和其他次要項常常可以忽略,而更應該關注主項(最高階項)
的階數。

第3 章線性表

線性表( List ):零個或多個數據元素的有限序列。

1、線性袤的順序儲存結構:

線性表的順序儲存結構,在存、讀資料時,不管是哪個位置,時間
複雜度都是0(1) ; 而插入或刪除時,時間複雜度都是O(n) 。這就說明,它比較適合元
素個數不大變化,而更多是存取資料的應用。

2、線性表的鏈式儲存結構

把連結串列中第一個結點的儲存位置叫做頭指標

迴圈連結串列

雙向連結串列:雙向連結串列(也uble linked List) 是在單鏈袤的每個結點中,再設定一個指向其前驅結點的指標
域。所以在雙向連結串列中的結點都有兩個指標域, 一個指向直接後繼,另一個指向直接
前驅。

第4 章棧與佇列

棧的順序儲存結構

兩棧共享空間

棧的鏈式儲存結構及實現
為何設計棧? 棧的引人簡化了程式設計的問題,劃分了不同關注層次,使得思考範圍縮小,更
加聚焦於我們要解決的問題核心
。反之,像陣列等,因為要分散精力去考慮、陣列的下
標增減等細節問題,反而掩蓋了問題的本質。

棧的應用一一遞迴

佇列的定義

佇列的鏈式儲存結構及實現

佇列的鏈式儲存結構,其實就是線性表的單鏈衰,只不過它只能尾進頭出而已,
我們把它簡稱為鏈佇列。

總結:

棧 是限定僅在表尾進行插入和刪除操作的線性表。
佇列( queue) 是隻允許在一端進行插入操作,而在另一端進行刪除操作的線性
表。

第5 章串

1、串的順序儲存結構
 

2、串的鏈式儲存結構

KMP 模式匹配演算法(字串操作的原理)

模式匹配演算法, 可以大大避免重複遍歷的情況,我們把它稱之為克努特一莫里斯一普拉特演算法, 簡稱KMP 算
法。

第6 章樹

二叉樹的定義

二叉樹性質

性質1 :在二叉樹的第i 層上至多有21- 1 個結點(i > =1 ) 。

性質2: 深度為k 的二叉樹至多有2飛1 個結點(k >= l) 。

……

二叉樹的儲存結構

不存在的結點設定為"^"

遍歷二叉樹

1.前序遍歷
規則是若二叉樹為空,則空操作返回,否則先訪問根結點,然後前序遍歷左子
樹, 再前序遍歷右子樹。如圖6-8-2 所示,遍歷的順序為: ABDGHCE I F 。

2. 中序遍歷
規則是若樹為空,則空操作返回,否則從根結點開始(注意並不是先訪問根結
點) ,中序遍歷根結點的左子樹,然後是訪問根結點,最後中序遍歷右子樹。如圖6-8-3
所示, 遍歷的順序為: GDHBAE I CF 。

3. 後序遍歷
規則是若樹為空,則空操作返回,否則從左到右先葉子後結點的方式遍歷訪問左
右子樹,最後是訪問根結點。如圖6品4 所示i 遍歷的順序為.: GHDBIEFCAo

4 . 層序遍歷
規則是若樹為空, 則空操作返回,否則從樹的第一層,也就是根結點開始訪問,
從上而下逐層遍歷,在同一層中, 按從左到右的頗用才結點逐個訪問。如圖6-8- 5 所
示,遍歷的順序為: ABCDEFGHL.

樹、森林與二叉樹的轉換

樹轉二叉樹

二叉樹轉換為樹

二叉樹轉換為森林

赫夫曼樹及其應用

赫夫曼編碼

編碼

樹、森林看似複雜,其實官們都可以轉化為簡單的二叉樹來處理,我們提供了
樹、森林與二叉樹的互相轉換的辦法,這樣就使得面對樹和森林的資料結構時,編碼
實現成為了可能。

第7 章圖

圖的定義與術語總結

圖按照有無方向分為無向圖和有向圖。無向圖自頂點和邊構成,有向圖由頂點和
弧何成。弧有弧尾和弧頭之分。
圖按照邊或弧的多少分稀疏圖和稠密圖。如果任意兩個頂點之間都存在邊叫完全
圈, 有向的叫有向完全圈。若無重複的邊或頂點到自身的邊則叫簡單圖。
圖中頂點之間有鄰接點、依附的概念。無向圖頂點的邊數叫做度,有向圖頂點分
為入度和出度。
圖上的邊或弧上帶權則稱為網。
圖中頂點間存在路徑,兩頂點存在路徑則說明是連通的,如果路徑最終回到起始
點則稱為環, 當中不重複叫簡單路徑。若任意兩頂點都是連通的,則圖就是連通圖,
有向則稱強連通圖。圖中有子圖, 若子圖極大連通則就是連通分量, 有向的則稱強連
通分量。
無向圖中連通旦n 個頂點n-l 條邊叫生成樹。有向圖中一頂點入度為。其餘頂
點入度為1 的叫有向樹。一個有向固自若干棵有向樹構成生成森林。

記得看過一個創意,我非常喜歡。說的是在美國, 晚上需要保安通過視訊監控對
如商場超市、碼頭倉庫、辦公寫字樓等場所進行安保工作,如圖7鬥-9 所示。值夜班
代價總是比較大的,所以人員成本很高。美國的黑夜就是中國的白天,利
用網際網路,他的員工白天上班就可以監控到美國倉庫夜間的實際情況

充分利用現有的資源,正向思維、逆向思維、整合思維可以創造更大價值。

深度優先遍歷

找鑰匙方案:無論從哪一閻房間開始都可以,比如主
臥室,然後從房間的一個角開始,將房間內的牆角、床頭櫃、床上、床下、衣櫃裡、
衣櫃上、前面的電視櫃等挨個尋找, 做到不放過任何一個死角,所有的抽屜、儲藏櫃
中全部都找遍,形象比喻就是翻個底朝天,然後再尋找下一間,直到找到為止。

廣度優先遍歷

我們把構造連通網的最小代價生成樹
稱為最小生成樹( Minimwn Cost Spanning Tr叫。
找連通網的最小生成樹,經典的有兩種演算法,普里姆演算法和克魯斯卡爾演算法。

拓撲排序介紹

第8 章查詢

順序表查詢:從表中第一個(或最後一個)記錄開始, 逐個進行記親的關鍵字和給定值比
較,若某個記錄的關鍵字和給定值相等,則查詢成功, 找到所查的記錄;如果直到最
後一個(或第一個)記錄,其關鍵字和給定值比較都不等時,則表中沒有所查的記
錄,查詢不成功。

有序表查詢

折半查詢:對圖書做了有序排列, 一個線性表有序時,對於查詢總是很有幫助的。

插值查詢:

斐波那契查詢:

稠密索引(字典)

分塊索引

第9 章排序

內排序是在排序整個過程中,待排序的所有記錄全部被就置在記憶體中。外排序是
由於排序的記錄個數太多, 不能同時放置在記憶體,整個排序過程需要在內外存之間多
次交換資料才能進行。

完結!加油!!!