用两个栈实现一个队列以及用两个队列实现一个栈
来源:互联网 发布:悟空遥控器有线网络 编辑:程序博客网 时间:2024/05/22 23:58
#include <iostream>#include <stack>#include <queue>using namespace std;template <typename T>//用两个栈实现一个队列class CQueue{public:CQueue();~CQueue();void appendTail(const T& node);T deleteHead();private:stack<T> s1;stack<T> s2;};template <typename T> CQueue<T>::CQueue(){}template <typename T> CQueue<T>::~CQueue(){}template <typename T>void CQueue<T>::appendTail(const T& node)//尾插{s1.push(node);}template <typename T>T CQueue<T>::deleteHead()//头删{if (s2.size() == 0){while (!s1.empty()){T& data = s1.top();s1.pop();s2.push(data);}}if (s2.size() == 0)throw new exception("empty");T Head = s2.top();s2.pop();return Head;}template <typename T>//用两个队列实现一个栈class CStack{public:CStack();~CStack();//先进后出void appendTail(const T& data);T deleteTail();private:queue<T> queue1;queue<T> queue2;};template <typename T>CStack<T>::CStack(){}template <typename T>CStack<T>::~CStack(){}template <typename T>void CStack<T>::appendTail(const T& data){queue1.push(data);}template <typename T>T CStack<T>::deleteTail(){if (0 == queue1.size() && 0 == queue2.size()){return NULL;}while (queue1.size() > 1){queue2.push(queue1.front());queue1.pop();}if (queue1.size() == 1){T data = queue1.front();queue1.pop();while (queue2.size() > 0){queue1.push(queue2.front());queue2.pop();}return data;}return NULL;}//测试代码void Test(char actual, char expected){if (actual == expected)printf("Test passed.\n");elseprintf("Test failed.\n");}int main(){CQueue<char> queue;queue.appendTail('a');queue.appendTail('b');queue.appendTail('c');char head = queue.deleteHead();Test(head, 'a');head = queue.deleteHead();Test(head, 'b');queue.appendTail('d');head = queue.deleteHead();Test(head, 'c');queue.appendTail('e');head = queue.deleteHead();Test(head, 'd');head = queue.deleteHead();Test(head, 'e');CStack<int> stack;stack.appendTail(1);stack.appendTail(2);stack.appendTail(3);int head1 = stack.deleteTail();Test(head1, 3);head1 = stack.deleteTail();Test(head1, 2);stack.appendTail(4);head1 = stack.deleteTail();Test(head1, 4);stack.appendTail(5);head1 = stack.deleteTail();Test(head1, 5);stack.appendTail(6);head1 = stack.deleteTail();Test(head1, 6);head1 = stack.deleteTail();Test(head1, 1);return 0;}
0 0
- 用两个栈来实现一个队列以及用两个队列来实现一个栈
- 用两个栈实现一个队列以及用两个队列实现一个栈
- 用两个栈实现队列 & 两个队列实现一个栈
- 两个栈实现队列&&用两个队列实现一个栈
- 如何用两个栈实现一个队列,以及用两个队列实现一个栈
- 用两个栈实现一个队列
- 用两个栈实现一个队列
- 用两个栈实现一个队列
- 用两个队列实现一个栈
- 用两个栈实现一个队列功能
- 用两个栈实现一个队列
- 用两个队列实现一个栈
- 用两个栈实现一个队列
- 用两个队列实现一个栈
- 用两个栈来实现一个队列
- 用两个栈实现一个队列功能
- 用两个队列实现一个栈
- 用两个队列实现一个栈
- Java内存模型知识点小结---《深入理解Java内存模型》(程晓明)读书总结
- STK Component之CalculationContext(计算上下文环境)
- [置顶]【Spring源码分析系列】ApplicationContext 相关接口架构分析
- linux下memcached安装以及启动
- 进程池 线程池 内存池
- 用两个栈实现一个队列以及用两个队列实现一个栈
- 京东校招编程题目
- 【Github教程】史上最全github使用方法:github入门到精通之一
- TQ210——S5PV210串口通信
- Android的MediaPlayer架构介绍
- What are some things you wish you knew when you started programming?
- angularjs示例
- 2.1.3 享元模式
- java-finally详解