template<typename T>class CQueue
{
public:
CQueue(void);
~CQueue(void);
void appendTail(const T& node)
T deleteHead();
private:
stack<T>stack1;
stack<T>stack2;
};
解题的思路:队列是先进先出的结构,栈是先进后出的结构
例子:假设有a,b,c 三个元素,依次放在satck1中,如果要实现队列先进先出即a应该第一个出,按栈的先进后出则无法实现,故利用第二个栈将stack1出栈,并依次进入stack2中则顺序为c,b,a 则再从stack2中出栈可以实现队列的先进先出;代码如下所示:
template<typename T>void CQueue<T>::appendTail(const T&element)
{
stack1.push(element);
}
template<typename T> T CQueue<T>::deleteHead()
{
if(stack2.size<=0)
{
while(stack1.size()>0)
{
T& data =stack.top();
stack1.pop();
stack2.push(data);
}
}
if(stack2.size()==0)
throw new exception("queue is empty");
T head=stack2.top();
stack2.pop();
return head;
}