C++算法之 用两个栈实现一个队列

2015-01-25 11:40:51 · 作者: · 浏览: 3

算法思路:

一个栈用来入队列,一个栈用来出队列:

现有两个栈s1 和s2;s1用来入栈,比如 队列进入 1 2 3 4 5 那么s1进栈 1 2 3 4 5 ,现在要出队列,意思就是要1先出来;

那么我们把栈s1的数据取出来都压到栈s2当中,那么栈s2就是 5 4 3 2 1 ;s2再出栈,此时1出栈就模拟出出队列的效果;

编写代码:

// QueueFrom2Stack.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include 
  
   
#include 
   
     using namespace std; template
    
      class CQueue { public: CQueue(){} ~CQueue(){} void appendTail(const T& node); T deleteHead(); void Prints(); private: stack
     
       s1; stack
      
        s2; }; template
       
         void CQueue
        
         ::appendTail(const T& node) { s1.push(node);//入栈即是入队列 } template
         
           T CQueue
          
           ::deleteHead() { if (s2.size() <= 0) //如果栈为空,就要先把s1出栈然后再压栈 { if (i = 0; i < s1.size();i++) { T& data = s1.top(); s1.pop(); s2.push(data); } } if (s2.size() == 0) { throw new exception("queue is empty"); } T head = s2.top(); s2.pop(); return head; } template
           
             void CQueue
            
             ::Prints() { while (!s1.empty()) { T& data = s1.top(); cout<
             
               q; q.appendTail(1); q.appendTail(2); q.appendTail(3); q.appendTail(4); q.appendTail(5); q.Prints(); getchar(); return 0; }