劍指Offer 面試題9用兩個棧實現佇列

2021-08-18 10:30:41 字數 721 閱讀 5866

思路:stack1存放著逆序的剩餘佇列,stack2存放著正序的佇列。pop的時候,當stack2為空,表示序列都在stack1中,則從stack1中迴圈pop後push到stack2,再從stack2中pop出隊首;stack2不為空則直接pop。push的時候,當stack2不為空,把資料從stack2放回stack1,再把數push到stack1中。

public

void

push(int node)

stack1.push(node);

}public

intpop()

return stack2.pop();

}

我這樣做的目的是,保證佇列的順序避免亂序,但實際上有些步驟根本沒有必要。比如說,pop的時候將佇列整個放入stack2中,緊接著乙個push操作又放回stack1,實際上沒有必要放回stack1,因為將現有佇列放到stack2的時候,相當於把佇列的前面部分放到了stack2,即使再push,stack1中放的則是佇列逆序的後一部分,順序並沒有被打亂,沒理清裡面的細節導致了無效的操作。解法二則為去掉冗餘操作後的解法。

public

void

push(int node)

public

intpop()

}return stack2.pop();

}

劍指offer 面試題9 用兩個棧實現佇列

棧後進先出,佇列先進先出。1.當stack2不為空時,stack2中的棧頂元素是最先進入佇列的元素,可以彈出。2.當stack2為空時,把stack1中的元素逐個彈入並壓入stack2中,先入stack1的元素這時在stack2頂部,這時彈出stack2就完成了佇列 書上的圖更便於理解 class ...

劍指offer面試題9 用兩個棧實現佇列

templateclass cqueue 佇列是先進先出,棧是先進後出。這題題目給出了兩個棧,首先假設我們往乙個棧裡面壓入了三個元素a b c。作為乙個佇列,如果我們壓入了a b c,那麼先出的會是a。但是棧彈出的會是c,那麼該怎麼輸出a呢,這裡注意到我們利用了乙個棧,還有乙個棧沒有使用,如果我們把...

劍指offer 面試題9 用兩個棧去實現佇列

題目 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。思路 由於棧是後入先出,佇列是先入先出。實現時,輸入元素時,將元素壓入stack1中,刪除元素時,先將stack1中的元素出棧,全部壓入stack2中再出棧,這樣元素的位置將倒置,實現先入先出的功能。操作 入隊 ...