繼資料結構學完了鍊錶之後,我們開始了棧與佇列的學習,相比較於上一章的鍊錶,這一張相比沒有上一張那麼難,下面總結一下我對棧與佇列的理解與感悟。
棧與佇列的共同點:
棧和佇列的訪問是受限制的,即在特定時刻只有乙個資料項可以被讀取或刪除。
棧的特點: 後進先出
佇列的實現:與棧一樣,可以用陣列實現也可以使用鍊錶實現。
棧的實現:
主要機制可用陣列來實現,也可以用鍊錶來實現。
棧的查詢:
棧只允許訪問乙個資料項,即最後插入的資料(棧頂元素)。
棧的基本操作:
出棧(pop)、入棧(push),取棧頂元素(top)還有其他擴充套件操作,判斷棧是否為空、是否已滿,讀取棧的大小等等,在stl棧模板庫中都有提及,想要實現什麼操作都可以查詢。
佇列特點: 先進先出
刪除操作:
插入元素:
假溢位:當rear=maxsize-1時,隊列為滿,如果再加入新元素,就會產生溢位。但是這種溢位不是真正的溢位,在陣列的前端可能還有空位置(刪除操作),所以這是一種假溢位。
為了解決順序佇列中的「假溢位」問題,需要把陣列想象成為乙個首尾相接的環,稱這種陣列為「迴圈陣列」,儲存在其中的佇列稱為「迴圈佇列」(加一取餘最大容量maxsize)。
佇列解決隊滿,隊空的判斷問題有3種方法:
1.設定乙個bool變數以區別隊滿還是隊空。
2.浪費乙個元素的空間,用於區分隊滿還是隊空。
3.是用乙個計數器記錄佇列中的元素個數。(即佇列長度)
在使用中,大多採用第2種方法,即隊頭、隊尾指標中有乙個指向元素,而另乙個指向空元素。
通常約定隊尾指標指示隊尾元素在一維陣列中的當前位置,隊頭指標指示在一維陣列中的當前位置的前乙個位置。
優先佇列
優先順序佇列與普通佇列不同之處:
資料項按關鍵字的值排序,資料項插入的時候會按照順序插入到合適的位置。就是可以自己寫出它的排序準則,然後向佇列裡新新增元素的時候它會按照你所寫的優先順序自動插入自己應該所在的位置。
棧與佇列 如何閒情雅緻地理解棧實現佇列?
直截了當講思路 思路 我們了解的佇列操作思路 主要講出隊入隊操作 例子 push 1 push 2 pop pop push 3 如何利用棧來模擬佇列的操作呢?所需條件 兩個棧,stack1,stack2,乙個做出隊操作棧,乙個做入隊操作棧 詳細下面介紹 入隊 入隊棧 stack1 直接push 其...
棧與佇列 建立棧 佇列
陣列棧 完成stack createstack int maxelements 函式,該函式建立乙個棧,maxelements為與分配的棧空間大小 棧可用空間為array 0,maxelements 1 typedef int elemtype struct stackrecord typedef ...
資料結構 棧與佇列理解與實現
佇列棧 只允許在一端進行插入或刪除操作的線性表。通過只操作top從而實現先進後出的特點。define maxsize 50 定義棧中元素的最大個數 typedef structsqstack include define maxsize 50 定義棧中元素的最大個數 using namespace ...