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