剑指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;
}
我觉得本题的考察点在模板以及栈的操作上面。因为栈进的顺序和出的顺序是相反的,而我们实现队列时需要进的顺序和出的顺序是相同的。我们通过两个栈负负得正,就可以实现输入的顺序和输出的顺序一致。
栈是先进后出,队列是后进先出。如果只有一个栈那么是无法实现队列的,但是两个栈完全可以。代码如下:
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;
}
我觉得本题的考察点在模板以及栈的操作上面。因为栈进的顺序和出的顺序是相反的,而我们实现队列时需要进的顺序和出的顺序是相同的。我们通过两个栈负负得正,就可以实现输入的顺序和输出的顺序一致。
相关文章推荐
- 剑指offer两个栈实现队列的c++写法(九度1512)
- 剑指Offer之用两个栈实现队列
- 剑指offer第五题【用两个栈实现队列】c++实现
- 牛客网-《剑指offer》-用两个栈实现队列
- 《剑指offer》——用两个栈实现队列
- 《剑指Offer》面试题-用两个栈实现队列
- 面试题07_用两个栈实现队列——剑指offer系列
- 《剑指Offer》读书笔记05:用两个栈实现队列
- 剑指Offer系列---(9)用两个栈实现队列和用两个队列实现栈
- 《剑指offer》——用两个栈实现队列
- 《剑指offer》面试题七 用两个栈实现队列
- (剑指Offer)面试题7:用两个栈实现队列
- 剑指offer :07 用两个栈实现队列
- JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作(《剑指offer》)
- 《剑指offer》面试题7—用两个栈实现队列
- 剑指offer 面试题7 两个栈实现队列
- 剑指Offer之 - 用两个栈实现队列
- 《剑指Offer》学习笔记--面试题7:用两个栈实现队列
- 剑指offer系列之五:用两个栈实现队列
- 《剑指Offer》面试题:用两个队列实现一个栈