劍指offer 用兩個棧實現佇列

2021-08-02 06:44:02 字數 747 閱讀 5034

題目描述

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。

思路:

首先搞清楚棧和佇列的區別,主要是出操作,出棧的時候元素「先進後出」,出佇列的時候元素「先進先出」。順序正好相反。

所以考慮有兩個棧,棧a用來讀取資料,當需要模擬佇列的出操作時,將棧a裡的資料取出放到棧b,再從棧b取出資料,即和佇列的順序相同。

進棧a:1 2 3 4 5

出棧a進棧b:5 4 3 2 1

出棧b:1 2 3 4 5(同佇列的順序相同)

需要注意:當棧b還有元素時,此時若將棧a的資料放入棧b,會破壞原來的順序,所以每次pop操作,要先判斷一下。

由於牛客網上沒有考慮棧為空時繼續pop的情況,所以就沒加return null的語句。

自己的解法:

public

class solution

public

intpop()

}return stack2.pop();

} // 這部分有點累贅,可以寫得更精簡些

}

拋異常的解法,看起來更高階

public

class solution

public

intpop()

if(stack2.empty())

}return stack2.pop();

}}

劍指offer 用兩個棧實現佇列

華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 9 30 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解析 我的思路是用乙個棧來儲存資料,入隊的話直接在這個棧上入棧,出隊的話借助輔助棧,對輔助棧入棧,然後取出頭元素,然後把輔助棧上的元素在...

用兩個棧實現佇列《劍指offer

題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解題思路 將元素入隊時壓入乙個棧中,隨後通過另乙個棧出隊 1 使用stack容器定義兩個棧 stack stack1 stack stack2 2 入隊 stack1.push node node為入隊元素 ...

劍指offer 用兩個棧實現佇列

記錄 劍指offer 上的演算法題。題目描述如下 佇列的宣告如下 template class cqueue cqueue t deletehead bool empty private stack stack1 stack stack2 實現的 如下 templatet stack1.push n...