zoukankan      html  css  js  c++  java
  • 面试题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类与对象(一)----基础概念理解
    JAVA数组
    JAVA算术运算符、关系运算符和位运算符
    JAVA数据类型
    JAVA配置环境变量
    C#中怎么生成36位的GUID
    jqAjax
    二进制1的个数
    成绩转换
    对决
  • 原文地址:https://www.cnblogs.com/ovs98/p/9876260.html
Copyright © 2011-2022 走看看