繁体   English   中英

用Java实现链接队列

[英]Implementing a linked queue with java

我很难为我的队列类提出一个入队方法。 我需要它,以便头部将toString()指向它,并首先指向A。 尾部指向C的位置,将插入队列。 我只需要朝正确的方向前进,谢谢!

public class SinglyLinkedQueue {
    public static void main(String[] args) {
        SinglyLinkedQueue myQueue = new SinglyLinkedQueue();
        myQueue.enqueue("A");
        myQueue.enqueue("B");
        myQueue.enqueue("C");
        System.out.println(myQueue.toString());
    }
    private SinglyLinkedNode head = new SinglyLinkedNode("",null);
    private SinglyLinkedNode tail = new SinglyLinkedNode("",null);

    public boolean isEmpty() {
        return head == null && tail == null;
    }
    public String toString() {
        if(isEmpty() == true) {
            return "";
        } else {
            return toString(head);
        }
    }
    public String toString(SinglyLinkedNode n1) {
        if(n1 == null) {
            return "";
        }
        String comma = "<";
        if(head != n1) {
            comma = ",";
        } if(n1.getNext() == null) {
            comma = ">";
        }
        return comma+n1.getValue()+toString(n1.getNext());
    }
    public void enqueue(String str) {

    }
}

假设这是一个FIFO队列,并且SinglyLinkedNode构造函数用于该节点的值和下一个节点:首先需要将当前尾部设置为指向新尾部,然后将尾部设置为指向新尾部:

    public void enqueue(String str) {
        // Empty queue
        if (isEmpty()) {
            head = new SinglyLinkedNode(str, null);
            tail = head;
        }
        // Non-empty queue
        else {
            SinglyLinkedNode newTail = new SinglyLinkedNode(str, null);
            tail.next = newTail;
            tail = newTail;
        }
    }

请注意 ,将头和尾设置为带有空String的单独节点没有太大意义(它们是SinglyLinkedNode 不同实例)。 相反,您在SinglyLinkedQueue的字段声明应为:

private SinglyLinkedNode head, tail;

头和尾仅是指向特定节点的指针。 您只需要在修改队列时使它们保持更新(当然,请确保将所有节点保持正确链接)。

最后是Ted Bigham指出的迭代toString()

    @Override
    public String toString() {
        if (isEmpty()) {
            return "";
        }

        String result = "<";
        SinglyLinkedNode current = head;
        while (current != null) {
            result += current.value;
            current = current.next;

            if (current != null) {
                result += ",";
            }
        }
        return result + ">";
    }

尽管我认为最好将<>返回空队列,因为它可以提供更多信息并简化代码。

注意,在@Override默认的toString()方法时,也应使用@Override批注。 为什么这里有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM