面试题8:用俩个栈实现队列
1 题目
用两个站实现一个队列,队列的函数appendTail 和 delteHead(),分别完成在队列的尾部插入插入节点和队列的头部删除节点。
2 思路
1)添加,每次添加,都相应的对栈A添加元素。
2)删除操作。首先判断栈B是否为空?step1:如果B为空,则判断A是否为空?如果A也为空,则输出错误信息,此时队列为空。如果A不为空,则将栈A中的所有数据存储到B中。执行B.push(A.top()),A.pop(). 然后再对栈B执行,B.pop()操作,将队列的头元素删除 step:如果B不为空, 则直接对B执行 B.pop()操作。

3 代码示例
T deleteHead()
{
T head;
//如果两个栈都是空栈,此时说明队列是空的
if (stack1.empty() && stack2.empty())
cout << "this queue is empty" << endl;
//如果栈2中有元素,那出队列就出栈2中的
if (!stack2.empty()){
head = stack2.top();
stack2.pop();
}
else //此时表明栈2已是空栈,再要出队列的话,那就需要把栈1中的所有素入栈到栈2中
{
while (stack1.size() > 0){
stack2.push(stack1.top());
stack1.pop();
}
head = stack2.top();
stack2.pop();
}
return head;
}

浙公网安备 33010602011771号