双栈实现 队列

来源:互联网 发布:查理大学 知乎 编辑:程序博客网 时间: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;}

原创粉丝点击