用俩个栈实现队列

来源:互联网 发布:java socket传输图片 编辑:程序博客网 时间:2024/06/04 18:46

某队列的声明如下:

template<typename T> class CQueue{public:      CQueue() {}      ~CQueue() {}      void appendTail(const T& node);  // append a element to tail      void deleteHead();               // remove a element from headprivate:     T> m_stack1;     T> m_stack2;};

提示:这道题实质上是要求我们用两个栈来实现一个队列。栈是一种后入先出的数据容器,因此对队列进行的插入和删除操作都是在栈顶上进行;队列是一种先入先出的数据容器,我们总是把新元素插入到队列的尾部,而从队列的头部删除元素。

template<typename T> class CQueue {public:CQueue() {}~CQueue() {}void appendTail(const T& node);  // append a element to tailvoid deleteHead();               // remove a element from headvoid printQueue();private:stack<T> m_stack1;stack<T> m_stack2;};template<typename T> void CQueue<T>::appendTail(const T& node) {if (node) {m_stack1.push(node);}}template<typename T> void CQueue<T>::deleteHead() {if (!m_stack2.empty()) {m_stack2.pop();} else {while (!m_stack1.empty()) {m_stack2.push(m_stack1.top());m_stack1.pop();}if (m_stack2.empty()) {cout << "stack empty!!!" << endl;} else {m_stack2.pop();}}}template<typename T> void CQueue<T>::printQueue() {cout << "当前栈:" << endl;while (!m_stack2.empty()) {cout << m_stack2.top() << ' ';m_stack2.pop();}while (!m_stack1.empty()) {m_stack2.push(m_stack1.top());m_stack1.pop();}while (!m_stack2.empty()) {cout << m_stack2.top() << ' ';m_stack2.pop();}cout << endl;}


0 0
原创粉丝点击