用一個(gè)隊(duì)列實(shí)現(xiàn)棧 兩個(gè)棧怎么實(shí)現(xiàn)隊(duì)列?
兩個(gè)棧怎么實(shí)現(xiàn)隊(duì)列?4. 實(shí)現(xiàn)思想(1)使用了兩個(gè)棧a和B,其中a負(fù)責(zé)push操作,B負(fù)責(zé)pop操作。使用變量backElement存儲最后添加的元素。(2)執(zhí)行隊(duì)列的推送操作。每次添加時(shí),都會相應(yīng)地
兩個(gè)棧怎么實(shí)現(xiàn)隊(duì)列?
4. 實(shí)現(xiàn)思想
(1)使用了兩個(gè)棧a和B,其中a負(fù)責(zé)push操作,B負(fù)責(zé)pop操作。使用變量backElement存儲最后添加的元素。
(2)執(zhí)行隊(duì)列的推送操作。每次添加時(shí),都會相應(yīng)地將元素添加到堆棧中。并返回元素賦值
](3)執(zhí)行隊(duì)列的pop操作,每次刪除,因?yàn)闂負(fù)責(zé)pop操作,首先確定棧B是否為空?
a.如果B為空,判斷a是否為空?
如果a也為空,則輸出錯(cuò)誤消息,并且隊(duì)列為空。
如果a不為空,堆棧a中的所有數(shù)據(jù)都存儲在堆棧B中。執(zhí)行B.push(a.top()),a.pop()。然后對堆棧B執(zhí)行B.pop()操作,刪除隊(duì)列的頭元素
B.如果B不是空的,直接對B執(zhí)行B.pop()操作
例如,對a,B,C執(zhí)行push操作,然后執(zhí)行pop操作
(4)執(zhí)行隊(duì)列的front()操作。該方法與pop操作相同,只是在最后一步中使用b.top()返回值。
(5)實(shí)現(xiàn)隊(duì)列的back()操作,因?yàn)槲覀兪褂米兞縝ack Elem保存最后的輸入數(shù)據(jù),所以它直接返回。
(6)要實(shí)現(xiàn)隊(duì)列的size()和empty()操作,分別對a和B執(zhí)行操作。
如何用兩個(gè)棧來實(shí)現(xiàn)一個(gè)隊(duì)列,并分析有關(guān)隊(duì)列操作的運(yùn)行時(shí)間?
例如,假設(shè)我們經(jīng)歷了以下四個(gè)步驟:按1,2 pop//pop 1,按3 pop//pop 2運(yùn)行第一個(gè)pop時(shí),將a中的所有1,2按入B,然后按得到1。此時(shí),B中仍然有一個(gè)2。下一步是push 3,這是a中的最后一個(gè)pop,并將B中的2賦給pop(2)如果它不是空的,則依次彈出堆棧a中的所有元素并將它們推入堆棧B。這里暗示如果它是空的,則直接從B中彈出,而不需要對a進(jìn)行任何操作。顯然,您需要If。。else語句。項(xiàng)目符號堆棧不同于一般堆棧,它需要檢查B是否為空。如果B不是空的,它將直接從B退出,這與一般退出相同。如果B為空,則需要將a中的所有元素從堆棧中取出并按入B,然后對B執(zhí)行常規(guī)堆棧輸出操作。
如何用兩個(gè)堆棧模擬實(shí)現(xiàn)一個(gè)隊(duì)列?
堆棧結(jié)構(gòu)為FIFO,隊(duì)列結(jié)構(gòu)為FIFO。使用兩個(gè)堆棧來模擬隊(duì)列的想法是,一個(gè)堆棧用于列出,另一個(gè)堆棧用于列出。看要討論的圖片:讓我們用一個(gè)例子來推導(dǎo)結(jié)論,然后繼續(xù)看要討論的圖片:1)列:依次在stack1中插入a、B和C2。2) 列:如果stack2為空,則stack1中的元素依次從堆棧中取出并壓入stack2。此時(shí),stack2中的元素從棧頂?shù)綏5资莂、B、C,然后彈出元素a、B3)column:插入stack1 in D元素4)out column:此時(shí)stack2中還有元素C,那么C應(yīng)該在D之前出column,所以out column元素是C5)out column:此時(shí),有stack2中沒有元素,則stack1中的元素D脫離堆棧并壓入stack2,stack2中的元素D彈出(即脫離列)。
C語言中如何把兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列?
偽代碼:queue(elem):queue(elem):queue(BPOP):queue(elem):queue(BPOP):queue(BPOP):queue