目錄
一、232. 用棧實現隊列
二、225. 用隊列實現棧
一、232. 用棧實現隊列
題目鏈接:力扣
文章講解:代碼隨想錄
視頻講解: 棧的基本操作! | LeetCode:232.用棧實現隊列
題目:
請你僅使用兩個棧實現先入先出隊列。隊列應當支持一般隊列支持的所有操作(push、pop、peek、empty):
實現 MyQueue 類:
void push(int x) 將元素 x 推到隊列的末尾
int pop() 從隊列的開頭移除并返回元素
int peek() 返回隊列開頭的元素
boolean empty() 如果隊列為空,返回 true ;否則,返回 false
代碼:
class MyQueue {
public:stack<int> stackin;stack<int> stackout;MyQueue() {}void push(int x) {stackin.push(x);return;}int pop() {if (stackout.empty()) while(!stackin.empty()) {stackout.push(stackin.top());stackin.pop();}int result = stackout.top();stackout.pop();return result;}int peek() {int res = pop();stackout.push(res);return res;}bool empty() {return stackin.empty() && stackout.empty();}
};
/*** Your MyQueue object will be instantiated and called as such:* MyQueue* obj = new MyQueue();* obj->push(x);* int param_2 = obj->pop();* int param_3 = obj->peek();* bool param_4 = obj->empty();*/
總結:兩個棧組成一個隊列,棧1入棧,棧2出棧,顛倒兩次負負得正。
二、225. 用隊列實現棧
題目鏈接:力扣
文章講解:代碼隨想錄
視頻講解:隊列的基本操作! | LeetCode:225. 用隊列實現棧
題目:請你僅使用兩個隊列實現一個后入先出(LIFO)的棧,并支持普通棧的全部四種操作(push、top、pop 和 empty)。實現 MyStack 類: void push(int x) 將元素 x 壓入棧頂。 int pop() 移除并返回棧頂元素。 int top() 返回棧頂元素。 boolean empty() 如果棧是空的,返回 true ;否則,返回 false 。
代碼:
class MyStack {
public:queue<int> queue;MyStack() {}void push(int x) {queue.push(x);}int pop() {int size = queue.size();while(--size){queue.push(queue.front());queue.pop();}int ans = queue.front();queue.pop();return ans;}int top() {return queue.back();}bool empty() {return queue.empty();}
};/*** Your MyStack object will be instantiated and called as such:* MyStack* obj = new MyStack();* obj->push(x);* int param_2 = obj->pop();* int param_3 = obj->top();* bool param_4 = obj->empty();*/
總結:把第一隊列中前面的元素添加到隊列的后面,留下最后一個元素輸出即為棧的pop。