演算法導論第十章 基本資料結構(一)

2021-09-13 12:50:42 字數 590 閱讀 2328

棧和佇列是動態集合

棧實現的是一種後進先出(lifo,last in first out)

佇列實現的是一種先進先出(fifo)

棧(stack)

棧的操作有兩個,乙個是壓入(push),乙個是彈出(pop)

對空棧執行pop操作,會導致乙個錯誤——棧下溢(underflow)

如果棧頂元素超出棧的大小,那麼則導致另外乙個錯誤——棧上溢(overflow)

佇列(queue)

佇列的操作也有兩個,入隊(enqueue)和出隊(dequeue)

佇列有兩個屬性,乙個是q.head,另外乙個是q.tail。

q.head指向隊頭元素,q.tail指向下乙個新元素即將插入的位置。

佇列中存放的位置有q.head,q.head+1.......q.tail-1,並在最後的位置纏繞,形成乙個環形。

當q.head=q.tail,隊列為空,執行出隊,出現錯誤下溢

當q.head=q.tail+1時,隊列為滿(考慮到環形結構),執行入隊,出現錯誤上溢

演算法導論第十章 基本資料結構

集合 如同在數學中一樣,集合也是電腦科學的基礎。不過數學上的集合時不變的,而演算法所操作的集合是動態改變的。資料結構這一部分介紹在計算機中表示和操作有窮動態集合的一些基本技術。字典 許多演算法要求能夠將元素插入集合,從集合中刪除元素,以及測試元素是否屬於集合。支援這些操作的動態集合就叫字典。另一些演...

第十章 基本資料結構 鍊錶

鍊錶 鍊錶與陣列的區別是鍊錶中的元素順序是有各物件中的指標決定的,相鄰元素之間在物理記憶體上不一定相鄰。採用鍊錶可以靈活地表示動態集合。鍊錶有單鏈表和雙鏈表及迴圈鍊錶。書中著重介紹了雙鏈表的概念及操作,雙鏈表l的每乙個元素是乙個物件,每個物件包含乙個關鍵字和兩個指標 next和prev。鍊錶的操作包...

演算法導論第十章資料結構 雙向鍊錶

看的概念挺朦朧的,沒有明確好雙鏈表到底需要哪些方法,其實針對這種結構應該可以寫很多方法,並沒有什麼特定標準。不過真是只看不練不行啊,一下手各種錯誤,各種溢位 include using namespace std templatestruct node templateclass flist tem...