軟考設計師15-資料結構
線性表
1 定義:n個元素的有限序列,通常記為(a1,a2,...,an)
2 特點:存在唯一表頭表尾,直接前驅,直接後繼
3 儲存
1)順序儲存
定義:用一組地址連續的儲存單元依次儲存線性表中的資料元素,邏輯、物理緊鄰,類似陣列
優劣:可隨機存取元素,但修/刪需要移動大量元素
2)鏈式儲存
定義:用結點來儲存資料元素,邏輯緊鄰,物理(不)連續
優劣:插/刪不需移動元素,但增加了儲存開銷,不能隨機訪問結點(儲存資料域和指標域)
延伸:1)雙向連結串列:每個結點包含 兩個 指標,指明直接前驅和直接後繼元素,可在兩個方向上遍歷連結串列

2)迴圈連結串列: 表尾 結點的 指標 指向 表頭結點 ,可在任何位置遍歷整個元素

3)靜態連結串列:藉助 陣列 來描述線性表的連線儲存方式
4 線性表的插入和刪除
1)順序儲存結構
挪元素,插入;刪元素,挪動
2)鏈式儲存結構
實質:對相關指標的修改

插入、刪除
插入:先讀取P指標next指向,即b地址;
讓C指向它;
然後讓P指向C的地址;
刪除:a指向被刪除元素(b)指向的元素c
棧
1 概念:通過一端( 棧頂 )實現資料儲存和檢索的一種線性表,有棧底, 先進後出
2 儲存結構
1)順序儲存
增加指標top指向棧頂元素
2)鏈式儲存(鏈棧)
不必設頭節點(棧頂操作),頭指標=棧頂指標
佇列
1 概念: 先進先出 的線性表,一端插入(對尾),另一端刪除(對頭)
2 儲存結構
1)順序儲存
設定隊頭/尾兩個指標
2)鏈式儲存(鏈佇列)
新增頭結點,指向頭指標。
佇列為 空 , 頭指標=尾指標,指向頭節點
串
1 概念:由字元構成的有限序列,取值範圍受限的線性表。記為S=’a1 a2 a3 ... an‘,S是串名,右邊是串值
2 特例:1)空串:長度為零 的串,,無任何字元
2)空格串:一/多個空格串構成的串
3)子串:由串中任意長度的連續字元構成的序列,類似子集。
子串在主串中的位置是該子串(首席出現)的第一個字元在主串中的位置。
空串是任意串的子串,例:cb
4)主串:包含字元的串,例:abcddcc
5)串相等:兩個串長度相等,且對應位置上的字元相同
6)串比較:依次比較字元ASCII碼,先大者大,始終相等,串長者大
a:97 、A:95、0 :48
3 串的儲存結構
串結束以 \0 結束
1)順序儲存
用一組地址連續的儲存單元來儲存串值的字元序列
2)鏈式儲存
每個結點可存一/多個字元,考慮儲存密度問題
KMP演算法
1 概念:字串匹配演算法
2 實現:實現一個next()函式,函式本身包含了模式串的區域性匹配資訊
部分匹配表位數:
字串(已匹配字串)
1)字首:除了最後一個字元外,所有以最後一個字元結尾的子串
2)字尾:除了第一一個字元外,所有以第一個字元開頭的子串
3)部分匹配位數:字首和字尾共有元素對應的長度
3 移動位數:已匹配位數-部分匹配位數
圖
1 概念:由兩個集合V和E構成的二元組,記作:G=(V,E)。
V是頂點的非空有限集合
E是圖中邊的有限集合
2 1)有向圖:G的每條邊有方向;頂點間關係<vi,vj>
2)無向圖:G的每條邊都無方向;頂點關係(vi,vj)
3)完全圖:G的任意兩個頂點都有一條邊相連線
1)有向完全圖:邊數:n(n-1)
2)無向完全圖:邊數:n(n-1)/2
3 度:頂點V的度是與它相關聯的邊的條數,以下兩者之和
1)入度:以V為終點的有向邊的條數 ID(V)
2)出度:以V為始點的條數OD(V)
4 帶權圖
邊上帶權的圖,權指每條邊上的數
5 連通圖
連通圖:無向圖中從一個結點到任意一個結點有路徑相連。邊的數目>=頂點數目-1
強連通圖:對於任意兩個頂點,存在到雙方的有向路徑。
6 生成樹
1)極小聯通子圖,n個結點,n-1條邊
若新增一條邊,構成一個環,減去一條邊,非聯通圖
2)最小生成樹:帶全路徑和最小
7 圖的儲存結構
1)鄰接矩陣
n個結點的圖,可使用n*n的矩陣(二維陣列)表示鄰接關係
2)鄰接表
由表頭結點和表結點兩部分組成

8 圖的遍歷
1)深度優先搜尋(DFS)

q
2)廣度優先搜尋(BFS)
