使用java实现链接队列

时间:2014-03-02 00:22:27

标签: java queue

我很难为队列类提出一个enqueue方法。我需要它,以便头部将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) {

    }
}

1 个答案:

答案 0 :(得分:0)

假设这是一个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;
        }
    }

注意将头部和尾部设置为具有空字符串的单独节点没有多大意义(它们是{em>不同的实例{{1 }})。相反,SinglyLinkedNode中的字段声明应为:

SinglyLinkedQueue

头部和尾部只是指向特定节点的指针。您只需在修改队列时保持更新(当然,确保您的节点保持适当的链接)。

最后针对Ted Bigham指出的迭代private SinglyLinkedNode head, tail;

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注释。有用的原因显示为here