两个栈模拟一个数列
2016-02-29 12:49
323 查看
问题:如何使用两个栈实现一个数列,并写出入队和出队的函数。
栈是后进先出,队列是先进先出。为了模拟先进先出,可以使用两个栈A,B,A栈专门管理入队的元素,B栈专门管理出队的元素。比如要将将1 2 3 4 5入队,则全部压入A中,此时A:1 2 3 4 5。如果要出队,则将A中先全部导入到B中,此时B :5 4 3 2 1 ,这时候再从B栈中出来的就是队列出队的顺序。
栈是后进先出,队列是先进先出。为了模拟先进先出,可以使用两个栈A,B,A栈专门管理入队的元素,B栈专门管理出队的元素。比如要将将1 2 3 4 5入队,则全部压入A中,此时A:1 2 3 4 5。如果要出队,则将A中先全部导入到B中,此时B :5 4 3 2 1 ,这时候再从B栈中出来的就是队列出队的顺序。
#include<iostream> #include<stack> using namespace std; template <typename T> class Queue{ private: stack<T>A; //管理入队元素 stack<T>B; //管理出栈元素 public: void push(T x); T pop(); }; template <typename T> void Queue<T>::push(T x){ A.push(x); } template <typename T> T Queue<T>::pop(){ if (B.empty()){ //如果控制出的栈为空 if (A.empty()) return false; else{ while (!A.empty()){ B.push(A.top()); A.pop(); } } } T x = B.top(); B.pop(); //完成出队列 return x; } int main(){ /*测试*/ Queue<int> Q; int i; for (i = 0; i < 5; i++) Q.push(i+1); for (i = 0; i < 5; i++) cout << Q.pop() << " "; cout << endl; Q.push(1), Q.push(2), Q.push(3); cout << Q.pop() << endl; Q.push(4); cout << Q.pop() << endl; return 0; }
相关文章推荐
- 面试常问 Java基础 冒泡排序
- js事件代理(委托)
- Android常见控件— — —TextView
- 微信之旅——订阅号和服务号
- STL 相关分析参考
- 在VS中添加lib库的三种方法
- fft分析前后频谱数据
- 对于诊断 Oracle Clusterware(CRS 或 GI)和 Real Application Cluster(RAC)问题的数据收集 (文档 ID 2017246.1)
- 如何(Deconfigure)解除配置/(Reconfigure)重新配置(重建 OCR)或卸载 GI (文档 ID 2016852.1)
- 妙计旅行-interveiw
- sql 索引的分类
- ACM杭电的AC回顾——2025
- 地理学史话:哈佛地理系之死
- 最常见的 5 个导致节点重新启动、驱逐或 CRS 意外重启的问题 (文档 ID 1524455.1)
- Eclipse快捷键大全
- ImageLoader 图片倒圆角
- Git 工作流程
- python 逐行读取文件的三种方法
- JS中Null与Undefined的区别(转载)
- Js之DOM(一)