2017-01-13 41 views
1

我開始創建變量head和隊列的tail,這當然是他們自己的列表的元素,我寫head = tail = null創建在構造一個空列表。在enq,我創建一個名爲help列表中的新元素,它應該保存,我想在列表的末尾把(因爲它是一個隊列)的新元素。當然,隊列中的tail始終是我們之前放在列表末尾的元素。然後我檢查head是否爲空(因爲列表本身就是空的,或者是因爲我們刪除了它的第一個元素,它應該始終與head相同),並且,如果必要的話,我定義爲headhelp。然後help應該顯示給列表的一個新的空元素。將我的隊列實現爲列表有什麼問題?

的問題是:當我測試程序,它停止後的第一個刪除,並告訴我,該名單已經是空的。

我猜的錯誤在於方法deq內。我想通過寫head = head.next刪除第一個元素,但我們定義headhelp之前,因此,head.next是等同採用help.next,這與null相同的,所以 - 方法返回一個列表是空的,它停止PROGRAMM的boolean

我可能要改變的help.next的「方向」,但我看不出如何。如何使整個事情工作?

創建列表的元素:

public class Entry { 
    Object content; 
    Entry next; 
} 

清單的執行情況:

public class QueueList implements List { 

    private Entry head; 
    private Entry tail; 

    public QueueList() { 
    head = tail = null; 
    } 

    public boolean empty() { 
    return head == null; 
    } 

    public void enq(Object x) { 
    Entry help = new Entry(); 
    help.content = x; 
    tail = help; 

    if (head == null) { 
     head = help; 
    } 

    help.next = null; 
    } 

    public Object front() { 
    return head.content; 
    } 

    public void deq() { 
    head = head.next; 
    } 
} 
+0

抽獎得到解決,在一張紙上,你在你的ENQ方法的每一步在做什麼(例如),當調用它兩次連續。對其他方法做同樣的事情。 –

+0

你從來沒有將'Entry'對象的'next'值設置爲其他任何值,而是null。所以當然'head = head.next;'會使你的頭爲空。只要看看你的代碼,看看你在哪裏修改'next'屬性。 –

+0

我的猜測是,我簡單地覆蓋各'我打電話了ENQ法時間tail'。 – Borol

回答

0
public void enq(Object x) { 
    Entry help = new Entry(); 
    help.content = x; 
    **tail = help;** 

    if (head == null) { 
     head = help; 
    } 

    help.next = null; 
    } 

總是有將只有一個在任何時間的隊列元素。

這可以使用下面的ENQ()方法

public void enq(Object x) { 
     Entry help = new Entry(x); 

     if (head == null) { 

      head = help; 

      tail = head; 

     } else { 
      if (head == tail) { 

       head.next = help; 
       tail = help; 



      } else { 

       this.tail.next = help; 
       this.tail = help; 
      } 
     } 

    }