面试题9:用两个栈实现队列
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。
解答:当stack2不为空时,在stack2中的栈顶元素是最先进入队列的元素,可以弹出。当stack2为空时,就把stack1中的元素逐个弹出并压入stack2。由于先进入队列的元素被压倒stack1的底端,经过弹出和压入操作之后就处于stack2的顶端,又可以直接弹出。代码如下:
void appendTail(int node)
{
stack1.push(node);
}
int deleteHead()
{
int data;
if(!stack1.empty())
{
while(!stack1.empty())
{
stack2.push(stack1.top());
stack1.pop();
}
}
if(stack2.size() == 0)
{
throw new exception("queue is empty");
}
data = stack2.top();
stack2.pop();
return data;
}