两个栈实现一个队列

/**
 * 两个栈实现一个队列
 * 栈IN用做入列,栈OUT用做出列
 * push:
 *    栈IN执行push操作
 * pop:
 *    如果栈OUT不为空,执行pop操作
 *    如果栈OUT为空,将栈IN所有元素依次pop并push到栈OUT。
 */
 
#include <stack>
#include <iostream>
using namespace std;

template<typename TYPE>
class Queue
{
public:
    void push(const TYPE& a_data)
    {
        IN.push(a_data);
    }
    
    TYPE front()
    {
        if (!OUT.empty())
        {
            return OUT.top();
        }
        else
        {
            while (!IN.empty())
            {
                OUT.push(IN.top());
                IN.pop();
            }
            return OUT.top();
        }
    }
    
    void pop()
    {
        if (!OUT.empty())
        {
            OUT.pop();
        }
        else
        {
            while (!IN.empty())
            {
                OUT.push(IN.top());
                IN.pop();
            }
            OUT.pop();
        }
    }

private:
    stack<TYPE> IN;
    stack<TYPE> OUT;
};

int main()
{
    Queue<int> myQueue;
    for (int i=0; i<10; i++)
    {
        myQueue.push(i);
    }
    for (int i=0; i<10; i++)
    {
        cout << myQueue.front() << endl;
        myQueue.pop();
    }
    return 0;
}

image

posted @ 2012-10-10 17:13  涵曦  阅读(364)  评论(0编辑  收藏  举报