You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编程新手求助:如何实现Queue的enqueue与dequeue方法

队列(Queue)实现入门指导

一、为什么knowsFirst要初始化为null?

队列刚创建的时候是空的,没有任何元素。knowsFirst的作用是指向队列里的第一个元素,既然空队列里啥都没有,那它自然要设成null——就像你刚买了个空盒子,盒子里没有东西,你没法指着任何一个物品一样。

二、先改代码里的小错误

注意:你的代码里有个常见的新手错误——把判断相等的==写成了赋值的=,比如if (knowsFirst = null),这会把knowsFirst直接设成null,而不是判断它是不是null,所有这种地方都要改成==。


三、实现enqueue(入队)方法

入队是把新元素加到队列的末尾,遵循「先进先出」的规则。我们分两部分实现:

1. Queue类的enqueue方法

public void enqueue(Object pObject) {
    // 先创建一个新的队列元素
    QueueElement newElement = new QueueElement(pObject);
    
    if (knowsFirst == null) {
        // 情况1:队列是空的,新元素就是第一个元素
        knowsFirst = newElement;
    } else {
        // 情况2:队列已有元素,找到最后一个元素,把新元素接在它后面
        QueueElement current = knowsFirst;
        // 一直找,直到某个元素的follower是null(说明它是最后一个)
        while (current.getFollower() != null) {
            current = current.getFollower();
        }
        // 让最后一个元素的follower指向新元素
        current.enqueue(pObject);
    }
}

2. QueueElement类的enqueue方法

这个方法的作用是给当前元素添加后续元素,也就是把新元素接在自己后面:

public void enqueue(Object pObject) {
    if (knowsFollower == null) {
        // 当前元素是最后一个,直接把新元素设为自己的follower
        knowsFollower = new QueueElement(pObject);
    } else {
        // 当前元素不是最后一个,把任务交给自己的follower继续找末尾
        knowsFollower.enqueue(pObject);
    }
}

简单说:如果自己后面没元素,就把新元素接在自己后面;如果有,就让后面的元素去处理,一直传到最后一个元素那里。


四、实现dequeue(出队)方法

出队是把队列的第一个元素移除,遵循「先进先出」规则:

public void dequeue() {
    if (knowsFirst != null) {
        // 把第一个元素换成它的下一个元素,原来的第一个元素会被自动回收
        knowsFirst = knowsFirst.getFollower();
    }
    // 如果队列本来就是空的,啥都不用做
}

举个例子:队列里是元素A→B→C,knowsFirst指向A。出队后,knowsFirst改成指向B,A就被移出队列了。


内容的提问来源于stack exchange,提问作者dokka2ns2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 20:05:01