题目:用两个栈实现队列,队列的声明如下,用两个函数appendTail和deleteHead实现尾插和头删:
template<typename T>
class CQueue
{
public:
CQueue();
~CQueue();
void appendTail(const T& node);
T deleteHead();
private:
stack<T> stack1;
stack<T> stack2;
};
插入元素选择直接插入到一个stack里面就可以了,删除元素可以利用空余的栈去实现,(先判断空余栈是否为空)把之前插入的元素出栈再入到空余栈中,顺序就又反回来了,然后依此出栈就可以了。
template<typename T>
void CQueue<T>::appendTail(const T& element)
{
stack1.push(element);
}
template<typename T>
T CQueue<T>::deleteHead()
{
if(stack2.empty())
{
while(!stack1.empty())
{
T data = stack1.top();
stack1.pop();
stack2.push(data);
}
}
if(stack2.empty())
{
throw new exception("queue is empty");
}
T head = stack2.top();
stack2.pop();
return head;
}