資料結構:
基本概念(資料、元素、物件和adt)
邏輯結構(集合、線性、樹形和圖形)
儲存結構(順序、鏈式、索引和雜湊)
演算法:
基本概念:演算法、特性和評價
演算法分析:時間和空間複雜度
邏輯結構:集合、線性、樹型、圖狀
儲存結構:順序、鏈式、索引、雜湊
演算法特性:有窮性、確定性、可行性、輸入、輸出
struct node;
typedef
struct nodenode;
順序儲存:順序表
鏈式儲存:單鏈表、雙鏈表、迴圈鍊錶、靜態鍊錶(陣列實現)ne
xtn ex
tpr
ior pri
or
定義利用了前驅、後繼
查詢、插入、刪除複雜度:o(
n)o (n
)
initlist(&l);//初始化
length(l);//求表長
locateelem(l,e);//按值查詢
getelem(l,i);//按位查詢
listinsert(&l,i,e);//插入
listdelete(&l,i,&e);//刪除操作
printlist(l);//輸出
empty(l);//判空
destroylist(&l);//銷毀操作
靜態鍊錶中的指標是結點的相對位址(陣列下標),又稱游標。
線性表操作受限:棧(順序棧、鏈棧、共享棧),佇列(迴圈佇列、鏈式佇列、雙端佇列)
線性表推廣:陣列(一維陣列、多維陣列),壓縮儲存、稀疏矩陣to
p top
棧頂指標:初始-1
棧頂元素s[top]
進棧:++top,s[top]=x;
出棧:s[top],–top
棧空:top=-1,
棧長:top+1
這裡棧頂指標指向的就是棧頂元素,有事棧頂指標會指向棧頂元素的下乙個位置,初始化top=0。
佇列的順序儲存fr
ont fro
nt
rear
r ea
r初始狀態:front=rear=0
進隊:q[rear]=x,++rear
出隊:x=q[front],++front;
判空:front==rear
層次:根為第一層,
樹的高度(或者深度):樹中結點的最大層次
結點的深度是從根結點到該結點路徑上的結點個數。
結點的高度:從該結點向下走到達葉子結點的最長路徑上的結點個數。
樹的順序儲存結構中最簡單直觀的是雙親儲存結構。
鏈式儲存結構:孩子儲存結構(實質是圖的鄰接表儲存結構)
孩子兄弟儲存結構:樹和森林與二叉樹的相互轉換。
孩子兄弟表示法有稱為二叉樹表示法。
樹:結點 圖:頂點
在有向圖中,通常將邊稱為弧。
圖中每條邊都可以附有乙個對應的數,這種與邊相關的數稱為權。邊上帶有權的圖稱為帶權圖,也稱為網。
鄰接矩陣是圖的順序儲存結構
鄰接表是圖的一種鏈式儲存結構
第乙個頂點和最後乙個頂點相同的路徑稱為迴路或環。
在路徑序列中,頂點不重複出現的路徑稱為簡單路徑。
除第乙個頂點和最後乙個頂點之外,其餘頂點不重複出現的迴路稱為簡單迴路。
有向樹:有乙個頂點的入度為0,其餘頂點的入度均為1的有向圖稱作有向樹。
圖的深度優先搜尋(dfs)類似於二叉樹的先序遍歷。時間複雜度o(
|v|+
|e|)
o (|
v|+|
e|
)圖的廣度優先搜尋(bfs)類似於樹的層次遍歷,對於鄰接表複雜度o(
|v|+
|e|)
o (|
v|+|
e|
)每個頂點均需搜尋一次(或入隊一次),每條邊至少訪問一次。
廣度優先生成樹
深度優先生成樹
資料結構之 棧 複習
棧 先進後出的線性表 棧也可以通過順序儲存和鏈式儲存的方式實現 一 順序儲存實現 陣列的尾端作為棧頂 實現 package org.xiazdong.list public class myarraystack public void push t e top if top t.length t t...
資料結構之 佇列 複習
佇列是先進先出的線性表 佇列由於是線性表,因此也有順序儲存和鏈式儲存兩種實現方式 一 順序儲存實現 由於佇列的特性是 從隊尾新增,從對頭刪除,因此如果讓陣列的尾部用作隊尾,陣列的頭部用作隊頭,則刪除元素時,時間複雜度為o n 因此我們需要用迴圈陣列實現,並且維護兩個屬性 front rear,fro...
資料結構複習之 排序
排序 對一串行物件根據某個關鍵字進行排序 穩定 如果a原本在b前面,而a b,排序之後a仍然在b的前面 不穩定 如果a原本在b的前面,而a b,排序之後a可能會出現在b的後面 內排序 所有排序操作都在記憶體中完成 外排序 由於資料太大,因此把資料放在磁碟中,而排序通過磁碟和記憶體的資料傳輸才能進行 ...