軟考-軟件設計師-數據結構

 

線性表

順序表:元素在內存當中以順序存儲

鏈表:離散單獨一個一個點,通過指針聯繫起來

(單鏈表)指針指向下一個元素地址

(循壞鏈表)尾元素指針指向首元素地址

(雙鏈表)雙鏈表頭尾指針指向上一個元素及下一個元素的地址

:先進後出

隊列:先進先出

循壞隊列:入隊時尾指針向前追趕頭指針;出隊時頭指針向前追趕尾指針,隊空和隊滿時頭尾指針均相等,使用求餘運算可以判斷隊列是否已滿。

樹的基本概念:略

樹的遍歷(先序,後序,層次)

二叉樹

滿二叉樹:二叉樹上所有節點都是充實飽滿的

完全二叉樹:有N層,N-1就是滿樹,最後一層節點從左至右排列。

二叉樹的遍歷(先序,中序,後序,層次)

樹轉二叉樹:對於任何一個節點樹的孩子節點作爲他轉成二叉樹的左子樹節點。樹的兄弟節點變成右子樹節點。(樹只留最左邊孩子節點的線,兄弟節點連起來)

查找二叉樹(二叉排序樹)

查找二叉樹的基本操作(查找,新增,刪除):略

最優二叉樹(哈夫曼樹):葉子結點權乘以樹高度(根爲0)用戶壓縮數據。常用與數據壓縮。

哈夫曼編碼:左子樹邊爲0右子樹邊爲1。

線索二叉樹:排序二叉樹查找就要遍歷,就要遞歸 ,二叉樹的存儲結構    Lchild   |  data  |  Rchild   葉子節點就造成空間浪費。由此左指針指向前驅,右指針指向後繼,此時叫線索  Lbit  |  Lchild   |  data  |  Rchild  | Rbit   1 代表線索,0代表常規指針。用戶數據的存儲不浪費。

 

二叉樹轉前序(中序,後序)線索數:先寫出前序個節點順序,葉子節點的前驅和後繼就很明朗了。

平衡二叉樹:是衡量排序二叉樹結構是否合理的一個指標(使綜合每個節點查找次數最低)

 

 

樹與圖關係:樹只是圖的一種特殊形式,樹有迴路就是圖了

圖的基本概念:有限非空頂點集合,邊集

有向圖<>,無向圖()

頂點的度:與之關聯的邊,有向圖(出度,入度)

子圖:略

完全圖:每對頂點之間都有一條邊相連,每對頂點之間都有二條邊相連

路徑:路徑是由邊組成的,起點到終點,所經歷邊的序列

迴路:一個點出發,又回到這一個點

簡單迴路:除了起點和終點相同,路徑序列其他點都不相同

強連通圖:每兩點,都有路徑可以到達(有向圖中,隔點能到達也行)

連通分量:一個圖割離開來分成幾部分,每部分都是連通圖。

網絡:圖加上邊的權值。

圖的存儲

鄰接矩陣:N個結點,用N階方陣存放圖中個結點關聯信息。網絡鄰接矩陣,方陣不在填值,填權值,沒邊填-1。

鄰接表:N個結點,N個列表, V1--- |V2|權值|指針|--- |V4|權值|null

 

圖的遍歷:深度優先算法  |    廣度優先算法

最小生成樹:各城市建網絡需要覆蓋,又要最低成本

實現一:普里姆算法   目標集合以一個出發點擴充完整數(擴充的點併到集合裏),每次尋找於集合最短的點。

實現二:克魯斯卡爾 算法:點都分離出來,每次選取最小邊直到全聯通

拓撲排序和關鍵路徑

AOV網:有向邊表示活動之間開始的先後關係

拓撲排序:任務的先後執行順序

AOE網:AOV的基礎上加上邊的權值

關鍵路徑:AOE中最長的路徑

邊的最早開始時間:發出頂點的最早開始時間

頂點的最早開始時間:到達頂點的最長路徑

 

哈希表

相比於樹和圖,哈希表不經過任何比較,直接找到關鍵字

概念:根據內容通過一定運算,直接得到他的存儲地址

衝突:關鍵字不同,求出的hash地址相同

哈希函數:運算過程 ,衡量標準:衝突避免

處理衝突的方法

開放地址法:當發生地址衝突時,按照某種方法繼續探測哈希表中的其他存儲單元,直到找到空位置爲止。

拉鍊法:散列列表每個節點增加一個指針字段,用於鏈接同義詞子表,鏈表中的結點都是同義詞

hash表查找:探測幾次把數據存入,查找的時候也要幾次查找出來

平均查找長度:所有元素的查找長度累加 / 元素個數

 

 

 

 

 

 

個人筆記

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章