用堆疊模擬佇列,和用佇列模擬堆疊

2021-06-05 19:46:56 字數 740 閱讀 4706

最近在看《演算法導論》,第十章裡面有一題是用了;兩個堆疊模擬乙個佇列,我設計的演算法如下:

堆疊a和b,a用作入隊,b出隊

(1)判隊滿:如果a滿且b不為空,則隊滿

(2)判隊空:如果a和b都為空,則隊空

(3)入隊:首先判隊滿。

若隊不滿:(1)棧a若不滿,則直接壓入棧a

(2)若a滿,則將a中的所有元素彈出到棧b中,然後再將元素入棧a

(4)出隊:(1)若b空就將a中的所有元素彈出到棧b中,然後出棧

(2)b不空就直接從b中彈出元素

(出隊的棧b的大小必須大於等於入隊棧a的大小,此時模擬的佇列的大小為動態的,最大值為2*sizeof(棧a),最小值為sizeof(棧a)+1)

用兩個佇列模擬乙個堆疊:

佇列a和b

(1)判棧滿:若佇列a和b有乙個為滿則對滿

(2)判棧空:若佇列a和b均為空則棧空

(3)入棧:a佇列當前有元素,b為空(倒過來也一樣)則將需要入棧的元素先放b中,然後將a中的元素依次出列併入列倒b中。(保證有乙個佇列是空的)

(4)出棧:將有元素的佇列出列即可。

比如先將1插入隊a中 ,現在要將2入棧,則將2插入b總然後將a中的1出列入到b中,b中的元素變為 2 ,1

a為空,現在要壓入3 則將3插入a中 ,依次將b中的2 ,1 出列並加入倒a中 ,a中的元素變為 3,2,1 b為空

演算法保證在任何時候都有一隊列為空

堆疊與佇列模擬

兩個題目 1 用兩個堆疊模擬乙個佇列 2 用兩個佇列模擬乙個堆疊 先看第乙個問題 用兩個堆疊模擬乙個佇列 只需要明白堆疊和佇列的特點,乙個是先進後出,乙個是先進先出就好做事了。乙個堆疊是先進先出,再把這個堆疊的資料存放到第二個堆疊不就ok了,變成了先進先出了麼?所以解決方法1就是兩個棧 stack1...

演算法14 如何高效地用堆疊模擬佇列

由於棧是先進後出,佇列是先進先出。可以採用兩個棧enstack和destack來模擬佇列的行為。佇列的基本操作包括入佇列 出佇列和佇列是否為空。入佇列時,push元素到enstack 出佇列是,從destack中執行pop操作,如果destack為空,則從enstack push元素到destack...

用棧模擬佇列和佇列模擬棧

棧 先進後出 filo 佇列 先進先出 fifo class myqueue 兩棧模擬佇列 def init self self.input self.output 進佇列 defpush self,x 出佇列 defpop self self.peek return self.output.pop...