目录
一、(leetcode 232)用栈实现队列
二、(leetcode 225)用队列实现栈
两个队列
一个队列
一、(leetcode 232)用栈实现队列
状态:已AC。pop()、peek()实现逻辑一样,就是peek()要把元素push回去
力扣题目链接
先进后出与先进先出的区别
class MyQueue {
public:stack<int> stIn;stack<int> stOut;/** Initialize your data structure here. */MyQueue() {}void push(int x) {stIn.push(x);}int pop() {if (stOut.empty()) {// 从stIn导入数据直到stIn为空while(!stIn.empty()) {stOut.push(stIn.top());stIn.pop();}}int result = stOut.top();stOut.pop();return result;}int peek() {int m=this->pop();stOut.push(m); // 因为pop函数弹出了元素res,所以再添加回去return m;}bool empty() {return stIn.empty()&&stOut.empty();}
};
注意一下
/** Initialize your data structure here. */MyQueue() {}
二、(leetcode 225)用队列实现栈
力扣题目链接
状态:已AC。与上一题区别:双queue时,另一个queue是备份,而非颠倒数据顺序作用
两个队列
lass MyStack {
public:queue<int> que1;queue<int> que2; // 辅助队列,用来备份/** Initialize your data structure here. */MyStack() {}void push(int x) {que1.push(x);}int pop() {int size = que1.size();size--;// 将que1 导入que2,但要留下最后一个元素while (size--) { que2.push(que1.front());que1.pop();}int result = que1.front(); // 留下的最后一个元素就是要返回的值que1.pop();que1 = que2; // 再将que2赋值给que1while (!que2.empty()) { // 清空que2que2.pop();}return result;}int top() {return que1.back(); }bool empty() {return que1.empty();}
};
一个队列
class MyStack {
public:queue<int> que;/** Initialize your data structure here. */MyStack() {}int pop() {int size = que.size();size--;while (size--) { // 将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部que.push(que.front());que.pop();}int result = que.front(); // 此时弹出的元素顺序就是栈的顺序了que.pop();return result;}
};