面试题整理-两个栈实现队列
来源:互联网 发布:淘宝上传照片尺寸 编辑:程序博客网 时间:2024/05/16 06:36
题目
用两个栈实现队列。
解法
准备两个栈。一个是input, 一个是output。
1、入栈:直接用input.push()
2、出栈:如果output非空。则利用output出栈。
如果output为空。则把input中的元素全部pop至output栈中。再利用output出栈。
说得简单一点就是从input栈进去,从ouput栈出去。明白为什么叫input,output没。
实际上就是利用output栈把出去的顺序颠倒一下。
略微可以优化的,就是在pop的时候,如果要把input全部倒到output中,可以把最后一个元素,留在input中。最后从input那里pop。
代码 stas.h
#ifndef _STACK_AS_QUEUE_H#define _STACK_AS_QUEUE_H#ifndef _NAME_SPACE_BEGIN_#define _NAME_SPACE_BEGIN_ namespace stas {#define _NAME_SPACE_END_ }#endif#include <iostream>#include <stack>_NAME_SPACE_BEGIN_template<class T>class queue {private: std::stack<T> input; std::stack<T> output;private: void _pop_input_into_output(const int leave = 0);public: queue() {} ~queue(){} const bool empty() const; void push(const T &v); void pop(); T &top();};template<class T>void queue<T>::_pop_input_into_output(const int leave) { while (input.size() > leave) { output.push(input.top()); input.pop(); }}template<class T>const bool queue<T>::empty() const { return input.empty() && output.empty();}template<class T>void queue<T>::push(const T &v) { input.push(v);}template<class T>void queue<T>::pop() { if (!output.empty()) output.pop(); else { this->_pop_input_into_output(1); output.pop(); }}template<class T>T &queue<T>::top() { if (!output.empty()) return output.top(); else { this->_pop_input_into_output(); return output.top(); }}_NAME_SPACE_END_#endif /*end of _STACK_AS_QUEUE_H */
再写个测试的主程序 main.cpp
输入1 x表示把x入队列
输出0表示把队首元素出队。
#include <iostream>#include <string>#include <fstream>#include "stas.h"using namespace std;using namespace stas;int main(int argc, char *argv[]) { stas::queue<int> q; while (1) { int a, b; cin >> a; if (a%2) { cin >> b; q.push(b); } else { cout << q.top() << endl; q.pop(); } } return 0;}
- 面试题整理-两个栈实现队列
- 面试题7 两个栈实现队列
- 面试题-----两个栈实现一个队列
- 面试题 两个队列实现栈
- 栈&队列面试题之两个队列实现一个栈
- 面试题13 - 用两个栈实现队列 【栈】
- 【数据结构】栈面试题--两个栈实现一个队列
- 【数据结构】栈面试题--两个队列实现一个栈
- 面试题--用两个栈实现一个队列
- 面试题研究 用两个栈模拟实现队列
- 剑指offer-->面试题7 用两个栈实现队列
- 经典面试题一:用两个栈实现一个队列
- 面试题7:用两个栈实现队列
- 面试题6:用两个栈实现队列
- 面试题7:用两个队列实现栈
- [剑指offer][面试题07]用两个栈实现队列
- 《剑指Offer》面试题-用两个栈实现队列
- 《剑指offer》面试题七 用两个栈实现队列
- 修改CentOS主机名
- Video for Linux 2.0 版API参考手册
- java操作properties文件
- java可变参数运用
- 异常处理机制
- 面试题整理-两个栈实现队列
- ipad打开javascript
- 丫丫的伤感恋情空间日志发布:因为,我不是你最喜欢的人
- jBPM4.4之流程引擎对象ProcessEngine
- 强大的el表达式
- sql通过触发器避免导入重复数据
- 密钥系统简介
- js无提示框,关闭当前窗口
- 【条款7】Declare destructors virtual in polymorphic classes