栈&队列面试题之之两个栈实现一个队列
来源:互联网 发布:两个excel表格匹配数据 编辑:程序博客网 时间:2024/05/21 09:38
使用两个栈实现一个队列
剖析:
我们知道栈是后进先出的一种数据结构,而队列是先进先出的一种数据结构,如何用两个栈来模拟队列这种数据结构呢?利用栈的特性-后进的先出,我们先将数据压入栈1中,在Pop时我们可以将栈1的数据压入栈2中,再将栈2的数据出栈,这就满足了队列的先进后出的特性了.
在Front和Back的实现中.Front返回的是栈2的栈顶元素,Back返回的是栈1的栈顶元素,但是要考虑栈1,栈2是否为空的情况,详细实现见代码部分.
栈2就相当于一个暂存器,而解决这种问题要把握清楚的就是栈和队列的特性.
下图是我从网上搜的一个gif图,我觉得很详细的描述两个栈实现队列的这种情况:
代码实现如下:
template<typename T>class QueueBy2Stack{public:void Push(const T& x){_stack1.push(x);}void Pop(){assert(!_stack1.empty() || !_stack2.empty());if(_stack2.empty()){//栈2为空栈while(_stack1.size() > 0){T& tmp=_stack1.top();_stack1.pop();_stack2.push(tmp);}}_stack2.pop();}T& Front(){assert(!_stack1.empty() || !_stack2.empty());if(_stack2.empty()){while(_stack1.size() > 0){T& tmp=_stack1.top();_stack1.pop();_stack2.push(tmp);}}return _stack2.top();}T& Back(){//此时栈1为空栈assert(!_stack1.empty() || !_stack2.empty());if(_stack1.empty()){while(_stack2.size() > 0){T& tmp=_stack2.top();_stack2.pop();_stack1.push(tmp);}}return _stack1.top();}bool Empty(){return (_stack1.empty()) && (_stack2.empty());}private:stack<T> _stack1;stack<T> _stack2;};
test.cpp
void testQueueBy2Stack(){QueueBy2Stack<int> qs;qs.Push(1);qs.Push(2);qs.Push(3);qs.Push(4);qs.Push(5);cout<<qs.Front()<<endl; //1cout<<qs.Back()<<endl; //5qs.Pop();qs.Pop();cout<<qs.Front()<<endl; //3cout<<qs.Back()<<endl; //5qs.Pop();qs.Pop();qs.Pop();}
...
0 0
- 栈&队列面试题之两个队列实现一个栈
- 面试题之两个队列实现一个栈
- 面试题之用两个栈实现一个队列
- 栈&队列面试题之之两个栈实现一个队列
- 面试题-----两个栈实现一个队列
- 剑指offer面试题之用两个栈实现队列
- 高频面试题之三种方法实现两个栈实现一个队列
- 剑指offer之面试题7用两个栈实现一个队列
- 面试题之两个栈实现一个队列,乘机数组问题
- 剑指offer面试题java实现之题7之相关题目:用两个队列实现一个栈
- 面试题7两个栈实现一个队列和两个队列实现一个栈
- 面试题(两个栈实现一个队列和两个队列实现一个栈)
- 【数据结构】栈面试题--两个栈实现一个队列
- 【数据结构】栈面试题--两个队列实现一个栈
- 面试题--用两个栈实现一个队列
- 经典面试题一:用两个栈实现一个队列
- 面试题 用两个栈实现一个队列
- 《剑指Offer》面试题:用两个队列实现一个栈
- Jsp中连接oracle数据库
- 过客--201609月期货从业考试--开考了
- JVM之Java内存区域(一)
- 使用 JFreeChart 来创建基于 web 的图表
- listview 如何去除滚动条
- 栈&队列面试题之之两个栈实现一个队列
- JVM之常用JVM配置参数
- C语言基础学习运算符-基本算术运算符
- 找到图中所有生成树的matlab实现
- 360 主页劫持修复
- Thinking in Java 中闪耀的星星(二)
- Flume官方文档翻译之(十)
- 1013 数素数
- Python 3 邮件的接收(IMAP)