2013-09-24 35 views
1

我正在嘗試在Java中構建一個內部列表的數據結構,該列表由包含整數的單個鏈接列表組成。我遇到了數據結構的架構問題。它需要有一個可以合併,拆分和賦予內部列表大小的函數的內部類。構建單鏈表

假設內部列表的大小將會改變,大小和數據將被移除以合併和優化數據結構。

我有一個驅動程序類來與數據結構接口。然後我有一個數據結構類,它將具有內部類。

我在哪裏添加/刪除頂級列表的方法,因爲單鏈表崩潰並擴展了我的數據?

我應該上幾堂課?一個驅動程序,數據結構(內部類)...更多?

我只是需要一個強大的編碼人員的一個小方向,我在頂層設計多次嘗試,並且我已經閱讀和搜索。我只需要一些方向。我附上了數據結構外觀的圖像。

請注意:

內列出了必須實現爲僞報頭和尾指針一個單鏈表,和我不能使用來自Java集合API的數據結構的內部列表。對於頂級列表,我必須使用Java Collections API中的通用LinkedList類。

+0

任何代碼這麼遠? –

+0

不是因爲我不知道從哪裏開始,我是鏈接列表的新手。 –

回答

4

注意:這看起來像一個家庭作業,否則將不需要重新發明輪子。知道這一點,我不會提供具體的代碼,只是僞代碼(除了像class,int等類似的關鍵字),沒有有用的方法,如getters或setter,沒有額外的字段等。這將是你的工作,以生成所有必要的Java代碼,使其工作。


我不知道從哪裏開始,我是新來的鏈表

開始通過定義會在列表裏面的元素的結構。這個怎麼做?檢查的要求(emphasys礦):

構建數據結構在Java中與內部列表是由的單鏈接列表包含整數

你需要一個數據起初可以容納一個整數值並表現爲單鏈表的結構。從the definition of singly linked list,該結構包含兩個元素:

  1. 整數數據保持
  2. 指針到下一個類似的數據結構。

這可以這樣解決:

class DataStructure { 
    int data; 
    DataStructure next; 
} 

現在,你有一個支持單向鏈表的結構,你需要一個新的結構,這將的單向鏈表和定義它的行爲。這可以作爲你的要求說來解決:

內部列表必須被實現爲單鏈表與虛擬指針

移動到這個僞代碼:

class SinglyLinkedList { 
    DataStructure head; 
    DataStructure tail; 
} 

就是這樣。現在你有了你的SinglyLinkedList,你只需要定義行爲。同樣,審查要求:

它需要有功能的方法內部類可以合併分裂,並給大小內列出的

從這裏,我們可以定義爲SinglyLinkedList數據結構中至少有三種方法:mergesplitsize。從它適應最新的類:

class SinglyLinkedList { 
    DataStructure head; 
    DataStructure tail; 
    //added this method just to know you need to add data to your singly linked list 
    public void add(int data) { 
    } 
    //you merge a list with another list 
    public void merge(SinglyLinkedList singlyLinkedList) { 
    } 
    //you split the list into two or more lists 
    public SinglyLinkedList[] split() { 
    } 
    //the size of the list is a numeric positive value 
    public int size() { 
    } 
} 

EDIT(根據您的修改,並通過看圖片)

有需要界定持有單鏈表的列表中的其他數據結構。通過要求:

對於頂級名單,我必須使用通用LinkedList類從Java集合API。

然後,你只需要使用一個LinkedList將包含單鏈表一個新的結構:

class SinglyLinkedListHolder { 
    LinkedList<SinglyLinkedList> holder; 

    public SinglyLinkedListHolder() { 
     holder <- new LinkedList<SinglyLinkedList>(); 
    } 
    //this holder should at least add new singlyLinkedList in the bigger list 
    public void add(SinglyLinkedList singlyLinkedList) { 
    } 
} 

注:我注意到,你試圖使用泛型定義你的結構:

private static class Node<T> { 
} 

強烈建議你不這樣做直到你真正掌握了單鏈表如何工作的主要概念。這可能需要一些時間,但最好一步一步來。使這個結構工作後,那麼你可以很容易地(事實上,這取決於你的實現)替換結構:

class DataStructure<T> { 
    T data; 
    DataStructure next; 
} 
+0

我無法理解單鏈表類中的代碼邏輯,以及「DataStructure head/tail;」做。此外,整數變量數據何時以及如何發揮作用? –

+0

@binary_Kramer我剛剛在作業中遵循了要求,僅此而已。當然,只看到這些方法時,很自然地問*列表的用法是什麼,然後*。請注意,基本用法是迭代列表中的所有元素並打印數據(這將意味着使用'DataStructure#data')。現在,'head'用於知道列表的起始位置,而'tail'用於知道列表結束的位置。 –

+0

請再次看看這個問題我能夠附上一張照片,也許這將幫助你看到我在說什麼?我很抱歉,但是我仍然對設計的清晰度有困難,並且我想使用泛型,所以結構很容易在以後更新 –