stack和queue的區(qū)別 如何用兩個堆棧模擬實現(xiàn)一個隊列?
如何用兩個堆棧模擬實現(xiàn)一個隊列?堆棧結構是FIFO,隊列結構是FIFO。使用兩個堆棧來模擬隊列的想法是,一個堆棧用于列出,另一個堆棧用于列出??匆懻摰膱D片:讓我們用一個例子來推導結論,然后繼續(xù)看要討
如何用兩個堆棧模擬實現(xiàn)一個隊列?
堆棧結構是FIFO,隊列結構是FIFO。使用兩個堆棧來模擬隊列的想法是,一個堆棧用于列出,另一個堆棧用于列出??匆懻摰膱D片:讓我們用一個例子來推導結論,然后繼續(xù)看要討論的圖片:1)列:依次在stack1中插入a、B和C2。2) 列:如果stack2為空,則stack1中的元素依次從堆棧中取出并壓入stack2。此時,stack2中的元素從棧頂?shù)綏5资莂、B、C,然后彈出元素a、B3)column:插入stack1 in D元素4)out column:此時stack2中還有元素C,那么C應該在D之前出column,所以out column元素是C5)out column:此時,有stack2中沒有元素,則stack1中的元素D脫離堆棧并壓入stack2,stack2中的元素D彈出(即脫離列)。
兩個棧怎么實現(xiàn)隊列?
4. 實現(xiàn)思想
(1)使用了兩個棧a和B,其中a負責push操作,B負責pop操作。使用變量backElement存儲最后添加的元素。
(2)執(zhí)行隊列的推送操作。每次添加時,都會相應地將元素添加到堆棧中。并返回元素賦值
](3)執(zhí)行隊列的pop操作,每次刪除,因為棧B負責pop操作,首先確定棧B是否為空?
a.如果B為空,判斷a是否為空?
如果a也為空,則輸出錯誤消息,并且隊列為空。
如果a不為空,堆棧a中的所有數(shù)據(jù)都存儲在堆棧B中。執(zhí)行B.push(a.top()),a.pop()。然后對堆棧B執(zhí)行B.pop()操作,刪除隊列的頭元素
B.如果B不是空的,直接對B執(zhí)行B.pop()操作
例如,對a,B,C執(zhí)行push操作,然后執(zhí)行pop操作
(4)執(zhí)行隊列的front()操作。該方法與pop操作相同,只是在最后一步中使用b.top()返回值。
(5)實現(xiàn)隊列的back()操作,因為我們使用變量back Elem保存最后的輸入數(shù)據(jù),所以它直接返回。
(6)要實現(xiàn)隊列的size()和empty()操作,分別對a和B執(zhí)行操作。