題目描述
用兩個棧來實現乙個佇列,完成佇列的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...