有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (1) 个答案

  1. # 1 楼答案

    {a1}使用了两个技巧:

    1. 队列包含一个始终存在的盲元素,即使在空队列中也是如此。盲元素始终是队列中的第一个元素,但在类外部不可见

    2. 队列实际上是一个环。我们知道我们到达最后一个元素时currentElement.next == blind

    下图显示了长度为0(左)的队列和长度为1(右)的QUE

    queue with tricks

    使用这些技巧的好处是:

    • 没有空指针
    • 没有用于添加/排队元素的if-else

    对于remove/deque,我们仍然需要检查队列是否为空

    添加

    newElement.next = head.next;
    newElement.prev = head;
    newElement.prev.next = newElement;
    newElement.next.prev = newElement;
    

    删除

    if (head.next == head) {
        // ERROR, queue is empty
    } else {
        removedElement.next.prev = removedElement.prev;
        removedElement.prev.next = removedElement.next;
    }
    

    请注意,在不使用这些技巧的情况下,只需使用一个额外的if-else语句就完全可以实现队列。 下图显示了一个简单实现的队列,长度为0(左)和1(右)

    naive queue

    添加

    if (head == null) {
        // queue is empty
        head = newElement;
    } else {
        // add to head
    }
    

    删除

    if (head == null) {
        // ERROR, queue is empty
    } else {
        // remove from tail
    }