您的位置:首页 > Web前端

剑指offer(两个栈实现队列)

2016-08-10 10:00 295 查看
       使用两个栈实现一个队列。

       栈是先进后出,队列是后进先出。如果只有一个栈那么是无法实现队列的,但是两个栈完全可以。代码如下:

template<typename T> class Cqueue
{
public:
Cqueue(void);
~Cqueue(void);

void appendTail(const T& node);
T deleteHead();
private:
stack<T>stack1;
stack<T>stack2;
}

template<typename T>void Cqueue<T>::appendTail(const T & element)
{
stack1.push(element);
}

template<typename T>T Cqueue<T>::deleteHead()
{
while(stack2.size()<=0)
{
while(stack1.size()>0)
{
T data=stack1.top();
stack1.pop();
stack2.push(data);
}
}
if(stack2.size()<=0)
throw("queue is empty!");

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

return ret;
}

       我觉得本题的考察点在模板以及栈的操作上面。因为栈进的顺序和出的顺序是相反的,而我们实现队列时需要进的顺序和出的顺序是相同的。我们通过两个栈负负得正,就可以实现输入的顺序和输出的顺序一致。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  队列 模板