如何使用两个堆栈实现 FIFO 队列,以便每个 FIFO 操作都需要摊销的常数时间?
问问题
1502 次
2 回答
1
冒着给出完整答案的风险(我希望练习是编写代码,而不仅仅是给出这个答案)......
推入一个队列,弹出另一个轮询。当输出堆栈为空时,将所有项目从输入堆栈一个接一个地移动到输出堆栈。
于 2010-11-09T22:51:47.443 回答
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;
}
于 2010-11-28T21:17:03.877 回答