資料結構與演算法 4 棧與佇列

2021-10-07 03:20:28 字數 1524 閱讀 7615

目錄

一.棧的定義

1.棧的定義

2.進棧出棧變化形式

二.棧的抽象資料型別

三.棧的順序儲存結構及實現

1.棧的順序儲存結構

2.棧的順序儲存結構–進棧操作

3.棧的順序儲存結構–出棧操作

四.兩棧共享儲存空間

五.棧的鏈式儲存結構

1.棧的鏈式儲存結構

2.棧的鏈式儲存結構–進棧操作

3.棧的鏈式儲存結構–出棧操作

六.棧的應用–遞迴

1.遞迴定義:

七.佇列的定義

八.佇列的抽象資料型別

九.迴圈佇列

1.迴圈佇列的定義:

十.佇列的鏈式儲存結構

1.含義

2.佇列的鏈式儲存結構–入隊操作

3.佇列的鏈式儲存結構–出隊操作

4.鏈佇列與迴圈佇列的比較:

1.棧的定義:

(1).棧(stack)是限定僅在表尾進行插入和刪除操作的線性表

(2).把允許插入和刪除的一端稱為棧頂(top),另一端稱為棧底(bottom),不含任何資料元素的棧稱為空棧。棧又稱為後進先出(last in first out)的線性表,簡稱lifo結構

2.進棧出棧變化形式1.棧的順序儲存結構

2.棧的順序儲存結構–進棧操作

3.棧的順序儲存結構–出棧操作

此時進棧出棧都沒有涉及到任何迴圈語句,因此時間複雜度均是o(1)

1.棧的鏈式儲存結構

(1)棧的鏈式儲存結構,簡稱為鏈棧

(2)對於空棧來說,鍊錶原定義是頭指標指向空,那麼鏈棧的空其實就是top=null的時候

2.棧的鏈式儲存結構–進棧操作

3.棧的鏈式儲存結構–出棧操作

(1)對比一下順序棧與鏈棧,它們在時間複雜度上是一樣的,均為o(1)1.遞迴定義:

(1)把乙個直接呼叫自己或通過一系列的呼叫語句間接地呼叫自己的函式,稱做遞迴函式

(2)迭代和遞迴的區別是:

迭代使用的是迴圈結構,遞迴使用的是選擇結構。遞迴能使程式的結構更清晰、更簡潔、更容易讓人理解,從而減少讀懂**的時間。但是大量的遞迴呼叫會建立函式的副本,會耗費大量的時間和記憶體。迭代則不需要反覆呼叫函式和占用額外的記憶體

(1)佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表

(2)佇列是一種先進先出(first in first out)的線性表,簡稱fifo。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭1.迴圈佇列的定義:

把佇列的這種頭尾相接的順序儲存結構稱為迴圈佇列

1.含義

(1)佇列的鏈式儲存結構,其實就是線性表的單鏈表,只不過它只能尾進頭出而已,我們把它簡稱為鏈佇列

2.佇列的鏈式儲存結構–入隊操作

3.佇列的鏈式儲存結構–出隊操作

4.鏈佇列與迴圈佇列的比較:

(1)從時間上,其實它們的基本操作都是常數時間,即都為o(1)的,不過迴圈佇列是事先申請好空間,使用期間不釋放,而對於鏈佇列,每次申請和釋放結點也會存在一些時間開銷

Python資料結構與演算法4 棧與佇列

構建棧 class stack object def init self self.list defpush self,item 新增乙個新的元素item到棧頂 defpop self 彈出棧頂元素 return self.list.pop def peak self 返回棧頂元素 if self....

資料結構4 棧與佇列

始終記住棧的特點 後進先出 佇列 先進先出 寫乙個棧的例子 1 8進製轉換 2 include3 include4 using namespace std 5void conversion intn 6 13while result.empty 1418 19 intmain 20 寫了乙個括號匹配...

資料結構與演算法 4棧和佇列

棧的定義 棧 stack 又稱堆疊,它是運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除操作,不允許在其他任何位置進行插入,刪除,查詢等操作。表中進行插入,刪除操作的一端稱為棧頂 top 棧頂儲存的元素稱為 棧頂元素。相對的,表另一端稱為棧底 botton 佇列定義 佇列 queue 簡稱佇...