双栈实现 队列
来源:互联网 发布:查理大学 知乎 编辑:程序博客网 时间:2024/04/27 01:19
#include "stdafx.h"#include <iostream>#include <stack>using namespace std;template< typename T >class Queue_by_stack { public: Queue_by_stack(){}; ~Queue_by_stack(){}; void append_tail(const T& node); T delete_head(); void Show_Queue(void); //从队首到队尾依次输出队列数据 protected: private: stack<T> stack1; stack<T> stack2; };template< typename T >void Queue_by_stack<T>::Show_Queue(void){T tmp;stack<T> S1(stack1);stack<T> S2(stack2);cout << "\n Here is show Queue. \n";while( !S2.empty() ){cout << S2.top() << " ";S2.pop();}while( !S1.empty() ){tmp = S1.top();S2.push( tmp );S1.pop();}while( !S2.empty() ){cout << S2.top() << " ";S2.pop();}}template< typename T >void Queue_by_stack<T>::append_tail(const T& node){stack1.push( node );}template< typename T >T Queue_by_stack<T>::delete_head(){T tmp;if ( stack2.empty() ){while ( !stack1.empty() ){tmp = stack1.top();stack2.push(tmp);stack1.pop();}}if ( stack2.empty() ){return -1;}tmp = stack2.top();stack2.pop();return tmp;}int main() { Queue_by_stack<char> my_queue; my_queue.append_tail('a'); my_queue.append_tail('b'); my_queue.append_tail('c'); my_queue.Show_Queue(); my_queue.delete_head(); my_queue.delete_head(); my_queue.Show_Queue(); my_queue.append_tail('d'); my_queue.append_tail('e'); my_queue.Show_Queue(); my_queue.delete_head(); my_queue.Show_Queue(); return 0;}