用俩个栈实现队列
来源:互联网 发布:精确日语翻译软件 编辑:程序博客网 时间:2024/06/03 05:41
栈、队列
一、题目:(感谢 http://blog.csdn.net/v_JULY_v 提供的题目)
二、分析:
用俩个栈实现队列。
某队列的声明如下:template<typename T>class CQueue{public: CQueue() {} ~CQueue() {} void appendTail(const T& node); // append a element to tail void deleteHead(); // remove a element from headprivate: Stack<T> m_stack_in; Stack<T> m_stack_out;};分析:从上面的类的声明中,我们发现在队列中有两个栈。
因此这道题实质上是要求我们用两个栈来实现一个队列。
栈是一种后入先出的数据容器,对队列进行的插入和删除操作都是在栈顶上进行;
队列是一种先入先出的数据容器,我们总是把新元素插入到队列的尾部,而从队列的头部删除元素。
1.设定A栈用于保存队列信息,B栈为辅助栈
2.入列,如同入栈(A)操作
3.出列,把出栈(A)的元素入栈(B),至A栈中的最后一位舍去,把出栈(B)的元素入栈(A),完成出列的过程
三、代码:
四、进阶:#include<iostream>using namespace std;const int stackSize = 10;template<typename T> class Stack{public:Stack() {size = -1;}~Stack(){}void push(const T& node);//入栈 T pop();//出栈 void printStack();//输出栈中所有元素 int size;//栈大小 private:int stackArray[stackSize];//保存栈元素};template<typename T> void Stack<T>::push(const T& node){if(size == stackSize-1) throw "上溢出";else stackArray[++size] = node;}template<typename T>T Stack<T>::pop(){if(size == -1) throw "下溢出"; else return stackArray[size--];}template<typename T>void Stack<T>::printStack(){for(int i=0;i<=size;i++) cout<<stackArray[i]<<" ";cout<<endl;}template<typename T> class CQueue{public:CQueue() {}~CQueue() {}void appendTail(const T& node); // append a element to tailvoid deleteHead(); // remove a element from headprivate:Stack<T> m_stack_in;Stack<T> m_stack_out;};template<typename T> void CQueue<T>::appendTail(const T& node){m_stack_in.push(node);m_stack_in.printStack();}template<typename T> void CQueue<T>::deleteHead(){int size = m_stack_in.size;for(int i=0;i<size;i++) m_stack_out.push(m_stack_in.pop());m_stack_in.size = -1;size = m_stack_out.size;for(int i=0;i<=size;i++) m_stack_in.push(m_stack_out.pop());m_stack_out.size = -1;m_stack_in.printStack();}void main(){CQueue<int> cq;cout<<"入列 ";cq.appendTail(1);cout<<"入列 ";cq.appendTail(2);cout<<"入列 ";cq.appendTail(3);cout<<"出列 ";cq.deleteHead();cout<<"出列 ";cq.deleteHead();cout<<"入列 ";cq.appendTail(4);cout<<"出列 ";cq.deleteHead();cout<<"出列 ";cq.deleteHead();cout<<"入列 ";cq.appendTail(5);}
两个队列实现栈。
分析:栈使用数组实现比较方便;而队列使用链表实现比较方便。
- 用俩个栈实现队列
- 用俩个栈实现队列
- 57 用俩个栈实现队列
- 用俩个栈实现队列
- 队列实现
- 队列实现
- 队列实现
- 队列实现
- 队列实现
- 队列实现
- 队列实现
- 实现队列
- 队列实现
- 队列实现
- 第五十七题(用俩个栈实现队列)
- 队列的实现:顺序队列
- 队列的实现:链式队列
- 队列----循环数组实现队列
- android动画Scale+Translate
- Twitter的开源软体Zipkin
- VC操作WINCE5.0自带EDB数据库(设备测试通过)
- Posix线程编程小技巧
- Mysql相关操作
- 用俩个栈实现队列
- 使用Ant对程序打包并上传服务器
- Android下Multiple markers at this line的解决方法
- 有趣的C语言测试题
- sqlserver 行转列
- 解决eclipse中overlaps the location of another project: 'xxxx'
- .NET系统学习----Globalization & Resources
- iphone开源项目列表
- ORACLE日志的状态