線性表:
1.順序表(記憶體順序排列)
2.鍊錶
(記憶體離散排列,通過指標連線)
鍊錶:1.
單鏈表(資料域,指標域)
2.迴圈列表(最後乙個指標域的指標指向第乙個節點)
3.雙鏈表(有兩個指標域)
單鏈表的操作:
1.刪除乙個結點(
next
指標)(
next
指標)2.
插入乙個結點(先連再斷)
雙鏈表的操作:
1.刪除乙個結點
2.插入乙個結點(先將新結點的前後指標指向要連線的節點,在將原來節點的指標指向新結點)
棧(先進後出)
佇列(先進先出)
迴圈佇列
(沒有最後乙個空間
)1.為空時,
head=tail;
2.滿時,
head=tail+1
;樹和二叉樹
(層樹從
0層開始,部分是從
1層開始的)
1.葉子節點
2.分支結點(包括根結點)
3.內部結點(比分子節點少個根結點)
4.n=k+1(n:
節結點;
k:總的度數
)樹的遍歷
1.前序遍歷(根到葉)
2.後序遍歷
(葉到根)
3.層次遍歷(按層次,從左到右)
二叉樹(
左結點,又結點)1.
滿二叉樹(所有結點都有,是完全二叉樹)
2.完全二叉樹(
n-1層是滿二叉樹,最後一層從左到右排列)
二叉樹的重要性:
1.在二叉樹的第
i層做多有
2^i次;(從
0層開始)
2.深度為
k的二叉樹最多有2^(
k+1)
-1次;
3.對任何一顆二叉樹,如果葉子結點數為
n0,度為
2的節點數為
n2,則
n0=n2+1;
二叉樹遍歷
1.前序遍歷
2.中序遍歷
3.後序遍歷
4.層次遍歷
查詢二叉排序樹
一棵查詢二叉樹,要麼是空,要麼滿足以下條件:
1.左右子樹是查詢二叉樹
2.若左子樹非空,則左子樹的各個結點上的值都小於根結點的值;
3.若右子樹非空,則右子樹的各個結點上的值都大於根結點的值;
二叉排序樹插入結點
1.如果存在相同結點,怎不允許插入
2.如果,二叉排序樹為空,則新結點我二叉排序樹;
3.插入的鍵值與父結點比較,確定是放在左子樹還是右子樹;
二叉排序樹刪除結點
1.如果是葉子結點,直接刪除;
2.如果要刪除的結點只有左子樹,則刪除該結點,並將左子樹上移到它的位子;
3.如果要刪除的結點存在左子樹和右子樹,則刪除該結點,並用中序遍歷找出子樹中的最大的結點
s,並用最大的結點
s代替該節點,然後刪除s;
最優二叉樹(哈夫曼樹)
樹的帶權路徑長度最短
如何構造最優二叉樹:選兩個全最小的構成一棵樹,得出新的權,重複前面的操作,知道全部結束
哈夫曼編碼:左為
0,右為
1如何將二叉樹改為線索二叉樹
:先寫出二叉樹的前序遍歷、中序遍歷、後序遍歷,然後找出他的前驅和後續節點。
資料結構與演算法 演算法 演算法和資料結構
資料結構與演算法 演算法 好吧,在這裡,您被優秀或優秀的軟體開發人員所隔開。在這種情況下,我會告訴您一開始或至少在我的情況下,並且我知道大多數時候,對於我認識的大多數人,您會覺得自己是乙個無能的人或白痴。基本上,我怎麼可能不理解這一點,然後您會感到沮喪。在這種情況下,我會告訴您情況並不像您想的那麼糟...
資料結構 資料結構與演算法01
1 求一組整數中的最大值。演算法 基本操作是 比較兩個數的大小 模型 仔細想想 你並不知道這個整數到底是多大?整數過大你該怎麼去表示?2 足協的資料庫管理的程式 演算法 需要管理的專案?如何管理?使用者介面?模型 3 資料與資料結構 資料 所有能被輸入到計算機中,並被計算機處理的符號的集合計算機操作...
資料結構 資料結構與演算法02
1 演算法設計的原則 設計演算法時,通常應考慮達到以下目標 1,正確性 2,可讀性 3,健壯性 4,高效率與低儲存量需求 1,正確性 規格說明 四個層次 a,程式中不含語法錯誤 b,程式對於幾組輸入資料能夠得出滿足要求的結果 c,程式對精心選擇的 典型 苛刻切帶有刁難性的幾組輸入資料能夠得出滿足要求...