如何用两个栈实现一个队列

来源:互联网 发布:知乐小说作品集百度云 编辑:程序博客网 时间:2024/06/05 04:28

问题:如何用两个栈实现一个对列的功能?
思路:从栈A入队列,从栈B出队列。
队列的2个最重要的操作,入队列,出队列。
入队列:从栈A入队列。
出队列:分2中情况
1. 如何栈B不为空,直接弹出。、
2. 如何栈B为空,将栈A中的数据全部弹入栈B中,再从栈B弹出数据

代码实现如下:

// QueueByStack.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<stack>#include<iostream>using namespace std;
template<class T>class Queue{public:    Queue(){}    virtual ~Queue(){}    void push(const T& e){        m_stackA.push(e);    }    void pop(){        if(m_stackB.empty()){            while(!m_stackA.empty()){                m_stackB.push(m_stackA.top());                m_stackA.pop();            }        }        m_stackB.pop();    }    size_t size() const{        return m_stackA.size()+m_stackB.size();    }    bool empty(){        return m_stackA.empty()&&m_stackB.empty();    }    T top(){        if(m_stackB.empty()){            while(!m_stackA.empty()){                m_stackB.push(m_stackA.top());                m_stackA.pop();            }        }        return m_stackB.top();    }protected:    stack<T> m_stackA;  //栈A    stack<T> m_stackB;  //栈B};
int _tmain(int argc, _TCHAR* argv[]){    Queue<int> m_queue;    m_queue.push(1);    m_queue.push(2);    cout<<m_queue.top();    return 0;}
阅读全文
0 0
原创粉丝点击