• 面试题9:用两个栈实现队列


    一.题目

    用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTaildeleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。

    二.思路

    使用两个栈stack1和stack2,若添加元素则直接压入栈stack1中;若删除元素,则要分情况:

    1. 如果栈stack2为空,则把栈stack1中的元素弹出压入栈stack2中,此时从栈stack2中弹出数据的顺序符合队列的特点(先进先出)
    2. 如果栈stack2非空,则直接弹出栈stack2顶部元素即可

    三.代码

    template<typename T> class CQueue{
    public:
    
        CQueue(void);
        ~CQueue(void);
    
        void appendTail(const T& node);
        T deleteHead();
    private:
        stack<T> stack1;
        stack<T> stack2;
    
    };
    
    template<typename T>void CQueue<T>::appendTail(const T& element){
        stack.push(element);
    }
    
    template<typename T> T CQueue<T>::deleteHead(){
        
        if(stack2.size() <= 0){
            while(stack1.size() > 0){
                T& data = stack1.top();
                stack1.pop();
                stack2.push(data);
            }
    
        }
    
        if(stack2.size() == 0)
            throw new exception("queue is empty.");
    
        T head = stack2.top();
        stack2.pop();
    
        return head;    
    }

    四.本题考点

    1. 考查应聘者对栈和队列的理解
    2. 考查应聘者写与模板相关的代码的能力
    3. 考查应聘者分析复杂问题的能力。应聘者能否通过具体的例子分析问题,通过画图的手段把抽象的问题具体化,从而解决这个相对复杂的问题,是能否顺利通过面试的关键。
  • 相关阅读:
    C# 0xC0000005 捕获
    “Task”未包含“Run”的定义
    Win10 清理自带APP
    SQLServer 2014 内存优化表
    PHP 常用函数
    Android开发之旅:环境搭建及HelloWorld
    C# PropertyGrid控件应用心得
    SQL Server 连接池 (ADO.NET) MSDN
    查看数据库连接池函数
    WCF客户端调用服务器端错误:"服务器已拒绝客户端凭据"。
  • 原文地址:https://www.cnblogs.com/ovs98/p/9876260.html
Copyright © 2020-2023  润新知