用两个栈实现一个队列以及用两个队列实现一个栈

来源:互联网 发布:悟空遥控器有线网络 编辑:程序博客网 时间: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
原创粉丝点击