当前位置: 首页 > 知识库问答 >
问题:

了解链表队列的入队方法

韶弘壮
2023-03-14

我很难理解linkedlist队列的enqueue方法的代码。我理解dequeue()、isEmpty()、First()和size()。首先,这里有一个LinearNode类来创建新的节点对象:

public class LinearNode<T> {
    private T element;
    private LinearNode<T> next;

    /**
     * Constructor: Creates an empty node.
     */
    public LinearNode() {
        next = null;
        element = null;
    }

    /**
     * Constructor: Creates a node storing the specified element.
     * @param elem  The specified element that is to be kept by this LinearNode.
     */
    public LinearNode(T elem) {
        next = null;
        element = elem;
    }

    /**
     *  Returns the node that follows this one.
     * @return  The node that follows this one.
     */
    public LinearNode<T> getNext() {
        return next;
    }

    /**
     *  Sets the node that follows this one.
     * @param node  The node which is to follow this one.
     */
    public void setNext(LinearNode<T> node) {
        next = node;
    }

    /**
     *  Returns the element stored in this node.
     * @return  The element that is kept within this node.
     */
    public T getElement() {
        return element;
    }

    /**
     *  Sets the element stored in this node.
     * @param elem  The element that is to be kept within this node.
     */
    public void setElement(T elem) {
        element = elem;
    }
}

下面是Enqueue方法

public void enqueue(T element) {
    LinearNode<T> tmp = new LinearNode<T>(element);
    if (isEmpty()) {
        // set-up front to point to the new node
        front = tmp;
    } else {
        // add the node after the old tail node
        rear.setNext(tmp);
    }
    // update rear to point to the new node
    rear = tmp;
    count++; // increment size
}

在此编辑包含Enqueue方法的LinkQueue类:

public class LinkedQueue<T> implements QueueADT<T> {
private LinearNode<T> front; // front node of the queue
private LinearNode<T> rear;  // rear node of the queue
private int count;           // the current size of the queue

/**
 * Constructor: Creates an empty Queue.
 */
public LinkedQueue() { 
    count = 0;
    /* the following assignments are not actually necessary as references
     *  are initialised automatically to null, 
     *  but they are included for clarity.
     */
    front = null;
    rear = null;
}

共有1个答案

艾和通
2023-03-14

根据我从代码中所能理解的,前面和后面只是指针。它们用于指向队列的第一个和最后一个节点。所以当你说:

rear.setNext(tmp);

您正在将新节点标记在队列的最后一个节点之后。

考虑以下队列:1,2,3,4

enqueue(5)

rear=tmp导致rear=5将后指针重置到最后一个节点

 类似资料:
  • 我得到了这些结构声明,以便实现使用循环链表的队列集合。 我试图创建一个函数,它将以指定的值排队(将其追加到队列的后面),我需要考虑队列为空和队列有一个或多个元素的两种情况。这是我到目前为止的代码: 这段代码给了我一个运行时错误,所以我不确定出了什么问题。在代码中,我假设队列-

  • 对于使用c实现的链表队列,我的入队列和出队列有点问题。我的老师说模板是禁止使用的,我不能改变他给我们的公共和私人功能。我总是遇到一个分割错误。我真的不明白我做错了什么。我还包括了header、enqueue和dequeue函数。

  • 本文向大家介绍C#通过链表实现队列的方法,包括了C#通过链表实现队列的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#通过链表实现队列的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 几天来,我一直在试图弄清楚一个关于最近任务的问题,但我似乎无法理解它。问题如下: 创建一个PriorityQueue类,该类包含两个字段:NoopPriorities和LinkedList…它应该有一个构造函数,该构造函数接受一个int值。将该值分配给NoopPrioities…同时,添加与NumberOfPrioritiorities一样多的LinkedList。获取优先级和对象的Enqueue

  • 我使用的参考资料如下: 出于效率考虑,我们选择队列的前面位于列表的开头,队列的后面位于列表的末尾。这样,我们从头部移除,并在尾部插入。 我想知道为什么在头部插入并在尾巴上移除会不好?这是因为在单链表中,删除尾节点并不容易,因为您必须访问之前的节点,而在单链表中执行此操作的唯一方法是从头开始?

  • 链式队列(Linked Queue) 1. 链式队列的概念 1.1 链式队列的定义 链式队列是基于单链表的存储表示实现的队列。 1.2 链式队列中各元素的逻辑及存储关系 链式队列可以采用单链表作为其存储表示,因此,可以在链式队列的声明中用单链表定义它的存储空间。 链式队列的队头指针指向单链表的第一个结点,队尾指针指向单链表的最后一个结点。 注:链式队列的队头元素存放在单链表的第一个结点内,若要从队