用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
Posted 转瞬即逝1995
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。相关的知识,希望对你有一定的参考价值。
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路:
- 首先要明确队列的特性是先进先出,栈的特性是先进后出;
- 在进队列的方法里我们只要有容器能装元素就行了,所以直接往栈1里压;
- 在出队列方法里,要保证出队列的是最先进入的元素:
- 最直观的想法就是把栈1的元素挨个出栈,然后往栈2里压。
- 但是还是要思考一下真的这么简单吗?不是的,栈2为空时才允许栈1往外弹元素并压到栈2里。
- 如果随时都可以往栈2里压,那么往栈1里压两个元素5、6(栈1状态是:{5,6}),马上出栈往栈2里压(栈2状态:{6,5});
- 接着栈1又来了个元素7,栈2的元素5、6还没出栈,此时要是再把7压到栈2那么栈顶元素就变7了,没法先取出5;
- 所以在往栈2压完一批元素后,栈1进了新的元素想往栈2压的时候,栈2必须把上一批的元素清空了才行(也就是栈2必须是空的)。
public:
void push(int node) {
stack1.push(node); //stack1存入该数
}
int pop() {
int res;
if (stack2.size() > 0) { //stack2不为空
res = stack2.top(); //取值stack2的第一个元素
stack2.pop(); //删除stack2的第一个元素
}
else if (stack1.size() > 0) { //stack1不为空
while (stack1.size() > 0) {
int ele = stack1.top(); //取值stack1的第一个元素
stack1.pop(); //删除stack1的第一个元素
stack2.push(ele); //将stack1的第一个元素赋值给stack2 这里是将stack1的元素存入stack2 ,stack1,2都为为先进后出,将顺序调整为了先进先出
}
res = stack2.top(); //取值stack2的第一个元素
stack2.pop(); //删除stack2的第一个元素
}
return res;
}
private:
stack<int> stack1;
stack<int> stack2;
};
思路和题解都是借鉴别人的 要好好理解理解
以上是关于用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。的主要内容,如果未能解决你的问题,请参考以下文章
算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。《剑指offer》
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型