2015-02-11 63 views
0

我正在處理的C++程序設計用於在C++中創建一個自定義的雙鏈表類,它通過利用無限數量的節點結構指針與一個數據值和兩個指針。這是這個計劃的前提。不能使用STL LinkedList類,必須自己創建。不定數量的類成員變量(C++)

這就是說,你如何創建一個沒有特定數量指向節點的類成員變量?我不想在聲明這個類時初始化五十個節點,但只能使用其中的十個節點。同時,我不想初始化只有5,然後不得不使用超過5。有沒有一種方法來動態地添加節點指針到C++中的鏈接列表類,當節點指針被認爲是一個成員變量?

我是否會以正確的方式去做這件事?如果是這樣,我將如何去做這件事?

+2

不,你是複雜的問題。讓一個節點指向下一個節點,稱爲*單鏈表*。如果你真的很積極,你可以添加另一個指向前一個節點的指針。節點只需要一個或兩個指針,而不是一個數組,至少還沒有。 – 2015-02-11 01:25:45

+0

所以我只需要我班的一個節點呢?因爲在這裏使用課程是我作業的一項要求。 – 2015-02-11 01:29:29

+1

@TreyBrumley在單鏈表中,您的列表類只需要一個指向第一個節點的指針,如果雙重鏈接,則只需要一個指向最後一個節點的指針。其餘的由節點處理。 [This](https://en.wikipedia.org/wiki/Linked_list)可能會幫助你理解基本概念。 – 2015-02-11 01:33:52

回答

6

圖片這樣的:

+----------+-------+------+ 
| Previous | Data | Next | 
| Node  | Field | Node | 
+----------+-------+------+ 

具有兩個鏈路字段和一個數據字段的節點。
(鏈表總是更容易理解,當你繪製它們。)

我們可以有兩個:

+----------+-------+------+ 
| Previous | Data | Next | 
| Node  | Field | Node | 
+----------+-------+------+ 
    ^    | 
    |     V 
+----------+-------+------+ 
| Previous | Data | Next | 
| Node  | Field | Node | 
+----------+-------+------+ 

第2節點指向第一的Previous Node領域。第一個節點沒有前輩,所以它的Previous Node字段爲空。

同樣,第一個節點的Next Node字段指向第二個節點。第二個節點沒有後繼,所以第二個節點的Next Node字段爲空。

這是我相信需求想要的:使用指針的雙向鏈表。

編輯1:三個節點

+----------+-------+------+ 
| Previous | Data | Next | 
| Node  | Field | Node | 
+----------+-------+------+ 
    ^    | 
    |     V 
+----------+-------+------+ 
| Previous | Data | Next | 
| Node  | Field | Node | 
+----------+-------+------+ 
    ^    | 
    |     V 
+----------+-------+------+ 
| Previous | Data | Next | 
| Node  | Field | Node | 
+----------+-------+------+ 

正如你可以看到,參觀(移動)在向前方式的節點,你跟着一個節點的鏈路領域獲得下一節點。同樣,要以後退的方式,您可以按照Previous Node鏈接進入節點的前任。

關於鏈接的一個很好的問題是,您只需要更改鏈接字段,以便在列表的中間中插入一個節點。插入過程的繪製留給讀者練習。

編輯2:容器類
鏈表是節點容器。對於簡單的實現,Container類不應該是一個Node。

容器有-一個指向第一個節點和可選的指向最後一個節點:

+------+-------+ 
| Last | First | 
| Node | Node | 
+------+-------+ 
    |  | 
    |  +---------------+ 
    |      | 
    |      V 
    | +----------+-------+------+ 
    | | Previous | Data | Next | 
    | | Node  | Field | Node | 
    | +----------+-------+------+ 
    | ^    | 
    |  |     V 
    | +----------+-------+------+ 
    | | Previous | Data | Next | 
    | | Node  | Field | Node | 
    | +----------+-------+------+ 
    | ^    | 
    |  |     V 
    | +----------+-------+------+ 
    | | Previous | Data | Next | 
    +->| Node  | Field | Node | 
    +----------+-------+------+ 

通過使用容器類,你不需要擔心的使用作爲第一個節點的空節點。在這裏,我們使用一個簡單的指針來指向第一個節點。此外,還有一個指向最後一個節點的指針。

指向最後一個節點的指針加速了追加節點到列表的操作。如果沒有這個指針,你將不得不遍歷所有的節點來找到最後一個節點,這需要花費很多時間。

+1

ascii藝術! – nonsensickle 2015-02-11 01:43:31

+2

@nonsensickle:正如我在我的評論中所說的,鏈接列表在繪製時總是更好理解。 :-) – 2015-02-11 01:45:17