algorithm - 构建一个数组大小限制为 5 的队列 - 但队列可以增长

标签 algorithm data-structures

问题:使用 enqueue 和 dequeue 方法构建一个队列类。但是,您使用的语言有一个错误,不允许数组存储超过 5 个元素,您将如何构建它?

我写了下面的代码但被拒绝了,想知道问题是什么以及我被拒绝的原因,仅供引用 - 这是在技术电话屏幕上。

static LinkedList<Queue<Integer>> list = new LinkedList<Queue<Integer>>();

public static void enQueue(Integer element){

    //iterating the linkedlist....
    while(true){ //todo
        Queue<Integer> curr;
        if(list.size() > 0)
            curr = list.getLast();
        else{
            curr = new LinkedList<Integer>();
            list.add(curr);
        }
        if(curr.size() < 5){
            curr.add(element);
            System.out.println("enqueued:" + element);
            break;
        } else{
            Queue<Integer> newQueue = new LinkedList<Integer>();
            newQueue.add(element);
            list.add(newQueue); //adding the new Queue of size(5) to the list
            break;
        }
    }
}

public static Integer deQueue(){
    LinkedList<Queue<Integer>> node = list;
    if(!isEmpty()){
        Integer retValue = 0;
        while(list.size() > 0){
            Queue<Integer> q = node.getFirst();
            if(!q.isEmpty()){
                retValue =  q.poll();
                break;
            }else{
                node.removeFirst();
            }
        }
        return retValue;
    }else{
        System.out.println("No such element found");
        return -1; //throw new NoSuchElementException("no element found");
    }
}

public static boolean isEmpty(){
    return list.size() == 0;
}

最佳答案

你被拒绝了,因为:

  • 您假设了一个预先存在的 Queue 类,这是您应该实现的。
  • 您使用了一个 LinkedList,它已经实现了一个类似队列的接口(interface),而不是实际实现一个队列。
  • 您对 LinkedList 的使用很糟糕——根本没有理由使用任何类型的循环。你可以让你的 enQueue 和 deQueue 调用 LinkedList.add() LinkedList.pollFirst()

面试官真的希望你实际实现一个队列。数组限制是强制你使用链接实现,面试官希望看到你正确维护链接。

关于algorithm - 构建一个数组大小限制为 5 的队列 - 但队列可以增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44981198/

相关文章:

python - 如何用 Python 计算网络的 Eb(k)?

algorithm - 给定二维空间中的一组点,每个点都有一些惩罚,找到一个恰好覆盖 N 个点的凸区域,最小化惩罚

c - 使用随机收缩算法对无向图进行最小割

algorithm - Matlab:以独特的方式对矩阵进行排序

C 中的 Cell 数据结构

c - 使用数组实现最小堆

arrays - 为连接组件标记/Blob 提取实现 LSL

algorithm - C# 中的 Hashtable 类型是使用链接还是开放寻址实现的?

c - C 中的冒泡排序错误代码! [Deitel C 第 6 版]

java - 红黑树自顶向下删除算法