面试题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()操作。
image

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;
}
posted @ 2021-03-14 18:08  一地斜阳  阅读(59)  评论(0)    收藏  举报