• 面试题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. 考查应聘者分析复杂问题的能力。应聘者能否通过具体的例子分析问题,通过画图的手段把抽象的问题具体化,从而解决这个相对复杂的问题,是能否顺利通过面试的关键。
  • 相关阅读:
    java IO选择流的原则及其与IO流相关类的关系
    图形用户界面(graphical user interface)
    泛型
    流、文件及基于文本的应用
    java线程
    多态与方法调用
    在eclipse中使用javap工具反汇编
    java类的访问控制符与其他几个特殊修饰符的总结
    java中几个特殊的类
    @property在内存管理中的参数问题
  • 原文地址:https://www.cnblogs.com/ovs98/p/9876260.html
Copyright © 2020-2023  润新知