2010-11-09 40 views
0

如何使用两个堆栈实现FIFO队列,以便每个FIFO操作都需要分摊恒定时间?摊销分析:具有两个堆栈的FIFO

+0

请按照[普通](http://tinyurl.com/so-hints)问题[指南](http://meta.stackexchange.com/q/10812 ),陈述任何特殊的限制,展示你到目前为止所尝试的内容,并询问具体是什么让你感到困惑。 – 2010-11-10 00:48:26

回答

1

在给予全部答案(我希望演习是写代码,而不是只给这个答案)风险...

推上一个入队,流行过其他的投票。当输出堆栈为空时,将所有项目从输入堆栈逐个移到输出堆栈。

0

类似的东西:

template <class T> 
class FIFO 
{ 
    stack<T> myStack; 
    stack<T> myStackReversed; 

public: 

    void enqueue(T data); 
    T dequeue(); 
}; 

template <class T> 
void FIFO<T>::enqueue(T data) 
{ 
    myStack.push(data); 
} 

template <class T> 
T FIFO<T>::dequeue() 
{ 
    if (myStackReversed.size() == 0) 
    { 
    int size = myStack.size(); 
    for (int i=0; i<size; i++) 
    { 
     myStackReversed.push(myStack.top()); 
     myStack.pop(); 
    } 
    } 

    T ret = myStackReversed.top(); 
    myStackReversed.pop(); 

    return ret; 
}