《剑指offer》——用两个栈实现队列
来源:互联网 发布:dnf怎么老网络中断 编辑:程序博客网 时间:2024/05/22 06:22
题目:
用两个栈实现队列。
分析与解法:
使用两个栈stack1和stack2。
- 假设入栈时使用stack1;
- 则出栈时使用stack2,若stack2中没有元素,则将stack1中的元素依次出栈,并在stack2依次入栈,再使stack2中的元素出栈,则stack1中先入栈的元素先出栈;若出栈时stack2中有元素,则直接出栈。
如图所示,
代码如下,
class Solution{public: void push(int node) { stack1.push(node); } int pop() { if(stack2.empty()) { while(!stack1.empty()) { stack2.push(stack1.top()); stack1.pop(); } } int pop = stack2.top(); stack2.pop(); return pop; }private: stack<int> stack1; stack<int> stack2;};
相关题目:
用两个队列实现栈。
分析与解法:
使用两个栈queue1和queue2。
- 假设入队时使用queue1;
- 则出队时应当将queue1中最后一个元素之前的所有元素都入队到queue2,然后让queue1中的最后一个元素出队。如果想继续让倒数第二个入队的元素出队,此时该元素为queue2中最后一个元素,于是同样将其之前的元素都入队到queue1,再让该元素出队。以此类推。
如图所示,
代码如下,
class Solution{public: void push(int node) { queue1.push(node); } int pop() { int pop; if(queue1.empty() && !queue2.empty()) { while(queue2.empty() > 1) { queue1.push(queue2.front()); queue2.pop(); } pop = queue2.front(); queue2.pop(); } else if(queue2.empty() && !queue1.empty()) { while(queue1.size() > 1) { queue2.push(queue1.front()); queue1.pop(); } pop = queue1.front(); queue1.pop(); } return pop; }private: queue<int> queue1; queue<int> queue2;};
0 0
- 《剑指offer》——用两个栈实现队列
- 《剑指offer》——用两个栈实现队列
- 剑指offer——用两个栈实现队列
- 用两个栈实现队列——剑指offer
- 剑指offer——用两个栈实现队列
- 剑指offer——用两个栈实现队列
- 剑指offer——用两个栈实现队列
- 剑指offer——用两个栈实现队列
- 剑指offer——用两个栈来实现队列
- 剑指offer—用两个栈实现队列
- 《剑指offer》—5、用两个栈实现队列
- 牛客网—剑指offer-用两个栈实现队列
- 牛客网—剑指offer-用两个栈实现队列
- 剑指offer(5)—用两个栈实现队列
- 剑指offer—用两个栈实现队列
- [剑指offer]用两个栈实现队列
- 【剑指offer】用两个栈实现队列
- 剑指offer--用两个栈实现队列
- Android 自定义ViewPager设置屏蔽左右滑动事件
- 《Linux Shell 脚本攻略》学习记录之一
- 第7周项目3 - 负数把正数赶出队列.cpp
- KETTLE 实现三表同步的问题
- java系统程序员修炼之道
- 《剑指offer》——用两个栈实现队列
- 解决jQuery-validation框架remote校验只能返回true、false问题
- 黑马程序员--约瑟夫环的问题
- Android笔记(3)---Intent之间的传值
- 经典算法之k-means聚类
- oracle数据库表用序列实现主键自增张
- Single Number II
- 第7周项目项目4 - 队列数组.cpp
- UVa 11178 - 计算几何初步