泰安百度做網(wǎng)站的百度搜索熱度排名
題目: 請(qǐng)你僅使用兩個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)后入先出(LIFO)的棧,并支持普通棧的全部四種操作(push、top、pop 和 empty)。
實(shí)現(xiàn) MyStack 類:
- void push(int x) 將元素 x 壓入棧頂。
- int pop() 移除并返回棧頂元素。
- int top() 返回棧頂元素。
- boolean empty() 如果棧是空的,返回 true ;否則,返回 false 。
注意:
你只能使用隊(duì)列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 這些操作。
你所使用的語(yǔ)言也許不支持隊(duì)列。 你可以使用 list (列表)或者 deque(雙端隊(duì)列)來(lái)模擬一個(gè)隊(duì)列 , 只要是標(biāo)準(zhǔn)的隊(duì)列操作即可。
示例:
輸入:
[“MyStack”, “push”, “push”, “top”, “pop”, “empty”]
[[], [1], [2], [], [], []]
輸出:
[null, null, null, 2, 2, false]
解釋:
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 返回 2
myStack.pop(); // 返回 2
myStack.empty(); // 返回 False
思路:
一個(gè)隊(duì)列實(shí)現(xiàn)棧,先計(jì)算隊(duì)列中元素的個(gè)數(shù),再減一,將所有前邊的元素依次添加到隊(duì)列的后邊去,這樣最后一個(gè)進(jìn)來(lái)的棧頂了
class Solution {
public:queue<int> que;void push(int x) {que.push(x);}int pop() {int size = que.size();size--;while (size--) {que.push(que.front());que.pop();}int result = que.front();que.pop();return result;}int top() {return que.back();}bool empty() {return que.empty();}
};int main() {Solution ss;ss.push(1);ss.push(2);cout << ss.top() << endl;ss.push(3);ss.pop();cout << ss.top() << endl;return 0;
}