用stack实现queue-这是一个很常见的面试题

来源:互联网 发布:免费语音合成软件 编辑:程序博客网 时间:2024/05/16 14:55

自己用stack实现的queue,能通过一些基本的测试,如果大家能在其中找到错误希望给予指点:

#include<iostream>#include<cassert>#include<stack>using namespace std;template <class T>class Queue{private:T back_data;stack<T> m_stack1;stack<T> m_stack2;public:Queue() {}~Queue() {}void push_back(int data);void pop_front();T front();T back();};template <class T>void Queue<T>::push_back(int data) {m_stack1.push(data);back_data = data;}template <class T>void Queue<T>::pop_front() {if(m_stack2.size() == 0) {int temp;while(!m_stack1.empty()) {temp = m_stack1.top();m_stack1.pop();m_stack2.push(temp);}}if(m_stack2.size() > 0) {m_stack2.pop();}}template <class T>T Queue<T>::back() {return back_data;}template <class T> T Queue<T>::front() {if(m_stack2.size() == 0) {int temp;while(!m_stack1.empty()) {temp = m_stack1.top();m_stack1.pop();m_stack2.push(temp);}}assert(m_stack2.size() > 0);return m_stack2.top();}void main() {Queue<int> m_queue;m_queue.push_back(2);m_queue.push_back(3);cout << m_queue.back() << endl;cout << m_queue.front() << endl;m_queue.pop_front();cout << m_queue.front() << endl;m_queue.pop_front();m_queue.push_back(4);m_queue.push_back(5);m_queue.push_back(6);cout << m_queue.front() << endl;m_queue.pop_front();cout << m_queue.front() << endl;}