57.用俩个栈实现队列(栈、队列)。
题目:某队列的声明如下:
template<typename T> class CQueue
{ public: CQueue() {} ~CQueue() {}void appendTail(const T& node); // append a element to tail
void deleteHead(); // remove a element from headprivate:
T> m_stack1; T> m_stack2; };分析:从上面的类的声明中,我们发现在队列中有两个栈。
因此这道题实质上是要求我们用两个栈来实现一个队列。 相信大家对栈和队列的基本性质都非常了解了:栈是一种后入先出的数据容器, 因此对队列进行的插入和删除操作都是在栈顶上进行;队列是一种先入先出的数据容器, 我们总是把新元素插入到队列的尾部,而从队列的头部删除元素。
思路:
这道题目比较老了,基本的思路就是两个栈。队列入队的时候,就在其中的一个栈入栈。如果,要出队,就看另一个栈中是否有数据,如果有则出栈,如果没有,就将刚才的那个栈中的元素全部出栈,顺序压入这个栈,然后在出栈。。这样就好了。