本文主要是介绍剑指offer之用两个栈实现队列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路
用一个栈Stack1用作存储,Stack2用作缓存,当进入队列时,直接将值压入stack1,出队时,先将Stack1的Stack1.size()-1个值压入stack2,然后取stack1的唯一值即为出站值。
入栈时,有一个问题是如果stack2中初始有值,则先将stack2中的值压入stack1。
代码
class Solution
{
public:void push(int node) {while(!stack2.empty()){//satck2有值时,直接压入stack1stack1.push(stack2.top());stack2.pop();}stack1.push(node);}int pop() {while(stack1.size()>1){//栈1出站个数为stack1.size()-1stack2.push(stack1.top()); //将stack2作为缓冲区stack1.pop();}int value=stack1.top();stack1.pop();/*while (!stack1.empty()){stack2.push(stack1.top());stack1.pop();}int value = stack2.top();stack2.pop();*/while(!stack2.empty()){//将stack2中的数据重新压缩stack1stack1.push(stack2.top());stack2.pop();}return value;}private:stack<int> stack1;stack<int> stack2;
};
这篇关于剑指offer之用两个栈实现队列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!