本文主要是介绍【一刷《剑指Offer》】面试题 7:用两个栈实现队列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
力扣对应题目链接:232. 用栈实现队列 - 力扣(LeetCode)
一、《剑指 Offer》内容
二、分析题目
这道题就是在考察对栈和队列的理解,需要我们熟悉栈(先入后出)和队列(先入先出)的特性。详情可见:
【数据结构】栈(Stack)的实现 -- 详解_栈的程序功能及算法实现-CSDN博客
【数据结构】队列(Queue)的实现 -- 详解_队列实现-CSDN博客
栈实现队列的出队操作效率低下:栈底元素(对应队首元素)无法直接删除,需要将上方所有元素出栈。
三、代码
class MyQueue {
public:stack<int> inStack;stack<int> outStack;MyQueue() {}void push(int x) {inStack.push(x);}int pop() {if(outStack.empty()){if(inStack.empty())return -1;while(!inStack.empty()){int tmp=inStack.top();inStack.pop();outStack.push(tmp);}}int dele=outStack.top();outStack.pop();return dele;}int peek() {int res=this->pop();outStack.push(res);return res;}bool empty() {return inStack.empty() && outStack.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();*/
四、相关题目(用两个队列实现一个栈)
力扣对于题目链接:225. 用队列实现栈 - 力扣(LeetCode)
1、《剑指 Offer》内容
2、代码
class MyStack {
public:queue<int> q1;queue<int> q2;MyStack() {}void push(int x) {q1.push(x);}int pop() {int n=q1.size();n--;while(n--){q2.push(q1.front());q1.pop();}int res=q1.front();q1.pop();q1 = q2;while (!q2.empty())q2.pop();return res;}int top() {return q1.back();}bool empty() {return q1.empty() && q2.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();*/
这篇关于【一刷《剑指Offer》】面试题 7:用两个栈实现队列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!