题目:
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和队列头部删除结点的功能。
template<typename T> class CQueue{
public:
CQueue(void);
~CQueue(void);
void appendTail(Const T& node);
T deleteHead();
private:
Stack<T> stack1;
Stack<T> stack2;
};
知识点:
栈是一个非常常见的数据结构,计算机操作系统会给每个线程创建一个栈用来存储函数调用时各个函数的参数、返回地址及临时变量等。栈的特点:先进后出;通常栈是一个不考虑排序的数据结构,我们需要O(n)的时间才能找到其中最大或者最小的元素。如果想在O(1)时间内找到栈中最大或者最小的值,需要栈元素在进栈是就有顺序的存放。
队列也是一个非常常见的数据结构,队列的特点是先进先出;在树的宽度优先遍历算法中,我们在遍历某一层树的结点时,把结点的子结点放到一个队列里,以备下一层结点的遍历。
思路:
在看到由两个栈实现一个队列,我马上想到必须有一个栈负责元素的进栈操作,另一个栈去负责元素的出栈操作;故要有栈实现队列进队和出队操作,必须要有一个栈去负责进队列,另一个栈负责出队列。(假设两个栈命名为stack1、stack2)。
实现队列添加