演算法導論讀書筆記(10)

2021-07-28 08:05:10 字數 2885 閱讀 6984

鍊錶有根樹的表示

棧和佇列都是動態集合。棧實現了一種先進先出的策略。類似地,佇列實現了一種後進先出的策略。

作用於棧上的insert操作稱為壓入push),而無參的delete操作常稱為彈出pop)。可以使用乙個陣列 s [ 1 .. n ]來實現乙個至多有 n 個元素的棧。如下圖所示,陣列 s 有個屬性 s.top ,它指向最近插入的元素。

我們把作用於佇列上的insert操作稱為入隊enqueue),把作用於佇列上的delete操作稱為出隊dequeue)。佇列有。當乙個元素入隊時,將排在隊尾,而出隊的元素總是隊首元素。下圖說明了用乙個陣列 q [ 1 .. n ]來實現乙個至多含 n - 1 個元素的佇列的方法。佇列具有屬性 q.head ,它指向佇列的頭,另乙個屬性為 q.tail ,它指向新元素將會被插入的地方。

enqueue(q, x)

1 q[q.tail] = x

2 if q.tail == q.length

3 q.tail = 1

4 else

5 q.tail = q.tail + 1

dequeue(q)

1 x = q[q.head]

2 if q.head == q.length

3 q.head = 1

4 else

5 q.head = q.head + 1

6 return x

鍊錶中,各物件按線性順序排序。其順序由各物件中的指標決定。本節介紹的是無序的雙鏈表。雙鏈表的每乙個元素都是乙個物件,每個物件包含乙個關鍵字域和兩個指標域: next 和 prev 。對鍊錶中的某個元素 x , x.next 指向鍊錶中 x 的後繼元素,而 x.prev 則指向鍊錶中 x 的前驅元素。下面給出的是鍊錶的基本操作。

list-search(l, k)

1 x = l.head

2 while x != nil and x.key != k

3 x = x.next

4 return x

list-insert(l, x)

1 x.next = l.head

2 if l.head != nil

3 l.head.prev = x

4 l.head = x

5 x.prev = nil

list-delete(l, x)

1 if x.prev != nil

2 x.prev.next = x.next

3 else

4 l.head = x.next

5 if x.next != nil

6 x.next.prev = x.prev

用鍊錶表示有根樹

如下圖所示,用域 p , left , right 來存放指向二叉樹 t 中的父親,左兒子和右兒子的指標。如果 x.p =nil,則 x 為根。如果結點 x 無左兒子,則 x.left =nil,對右兒子也類似。整個樹 t 的根由屬性 t.root 指向。如果 t.root =nil,則樹為空。

可以用二叉樹很方便地表示具有任意子女數的樹。該方法的優點是對任意含 n 個結點的有根樹僅用 o ( n )空間。這種左孩子右兄弟的表示如下圖所示。每個結點都包含乙個父親指標 p , t.root 指向樹 t 的根。每個結點 x 不再包含指向每個孩子結點的指標,而僅包含兩個指標:

x.left-child 指向結點 x 的最左孩子。

x.right-sibling 指向結點 x 緊右邊的兄弟。

如果 x 沒有孩子,則 x.left-child =nil;如果 x 是其父結點的最右孩子,則 x.right-sibling =nil

讀書筆記 演算法導論

第2章演算法入門 浮於表面不如深入其中,送給自己,自己是最大的敵人,那麼就盡最大努力去克服自己,沉思,冷靜,不浮躁!勘誤 在演算法導論第9頁,扼要的扼 內容提要 1 偽 的表示方法 2 插入排序演算法分析 3 迴圈不變式 4 演算法設計之分治法 divide and conquer 5 合併排序演算...

演算法導論 讀書筆記2010 12 6

演算法就是一系列的計算步驟,用來將輸入資料轉換為輸出結果。資料結構師儲存和組織資料的一種方式,以便於對資料進行訪問和修改。插入排序演算法,對n個資料項的時間大約是c1n 2,其中c1是乙個不依賴於n的常量。亦即該演算法所需的時間大致與n 2成正比。合併排序演算法,排序n個資料項的時間大約是c2log...

《演算法導論》讀書筆記(一)

理解 輸入到輸出的計算過程稱為演算法。1.演算法描述 2.證明演算法正確性 3.分析演算法效率 兩個例子 1.插入排序 思想 從未排序的序列中取出乙個元素,將其插入到已排序序列的正確位置。實現 include include using namespace std int main for int ...