剑指offer--面试题9:用两个栈实现队列

来源:互联网 发布:手机用usb使用电脑网络 编辑:程序博客网 时间:2024/06/06 01:34

#include <iostream>#include <stack>using namespace std;//***************数据结构*******************template<typename T>class CQueue{public:CQueue(void);~CQueue(void);void appendTail(const T& node);T deleteHead();private:stack<T> stack1;stack<T> stack2;};//*************实现****************************template <typename T> CQueue<T>::CQueue(void){}template <typename T> CQueue<T>::~CQueue(void){}template<typename T>void CQueue<T>::appendTail(const T& node){stack1.push(node);}template<typename T>T CQueue<T>::deleteHead(){if (stack2.size() <= 0){if (stack1.size() <= 0) throw new exception("queue is empty");while (stack1.size() > 0){stack2.push(stack1.top());stack1.pop();}}T temp = stack2.top();stack2.pop();return temp;}int main(){CQueue<char> queue;    queue.appendTail('a');    queue.appendTail('b');    queue.appendTail('c');    cout <<  queue.deleteHead() << endl;    cout <<  queue.deleteHead() << endl;    queue.appendTail('d');    cout <<  queue.deleteHead() << endl;    queue.appendTail('e');    cout <<  queue.deleteHead() << endl;    cout <<  queue.deleteHead() << endl;    return 0;}


#include <iostream>  #include <queue>  using namespace std;        queue<char> q1;queue<char> q2;void appendTail(const char data)  {            if (q1.size()==0 && q2.size() ==0)//如果q1与q2都为空,那么往q1中插入元素      {          q1.push(data);      }      else if (q1.size()>0)//如果q1不为空,那么往q1中插入元素      {          q1.push(data);      }      else if(q2.size()>0)//如果q2不为空,那么往q1中插入元素      {          q2.push(data);      }     }  char deleteTail()  {   char temp;    if (q2.size() == 0)      {          while(q1.size() != 1)          {  q2.push(q1.front());             q1.pop();               }          temp = q1.front();          q1.pop();         }      else      {          while(q2.size() != 1)          {             q1.push(q2.front());     q2.pop();                }          temp = q2.front();          q2.pop();      }      return temp;  }    int main()  {          appendTail('a');      appendTail('b');      appendTail('c');        cout <<  deleteTail() << endl;      cout <<  deleteTail() << endl;        appendTail('d');      cout <<  deleteTail() << endl;        appendTail('e');      cout << deleteTail() << endl;        cout << deleteTail() << endl;        return 0;  }