2015-11-19 257 views
1

所以我現在有一個簡單的結構(鏈表),我將使用在一個HashMap:創建指針動態分配的數組到結構C++

struct Node { 
    std::string key, value; 
    Node* head; 
} 

我目前試圖動態地分配與指針的數組到每個結構。這就是我現在所擁有的......

Node* nodes = new Node[100] 

我明白這個分配到內存中100個節點(我將不得不刪除以後)的陣列;然而,在反覆嘗試橫向這些節點(這是我的實現作爲一個鏈表)...

for (int x = 0; x < 100; x++) { 
    Node current = nodes[x]; // Problem is I wanted an array to node pointers. This is not a pointer. 
    while (current != nullptr) { // this isn't even legal since current is not a pointer. 
     // DO STUFF HERE 
     current = current.next; // This is not a pointer access to a method. I'm looking to access next with current->next; 
    } 
} 

希望我是很清晰。有人可以如何分配一個指向結構的動態數組指針?到目前爲止,我可以動態地分配一個結構數組,而不是指向結構體的指針數組。

+1

基本上,通過爲您的節點提供連續的內存,您炸燬了整個鏈接列表的想法。由於您擁有空間信息,因此不需要下一個節點(即,index) – 101010

+0

你似乎不確定你是想要一個鏈表還是一個動態數組。 – PaulMcKenzie

+0

這個想法是我正在實現一個hashmap,因此需要一個動態分配的LinkedLists數組。 –

回答

2

有兩種方法。您可以分配一個結構數組,並引入一個指向數組中將會扮演頭部角色的元素的指針。

例如

Node *head = nodes; 

(在這種情況下,頭指向節點[0])

將不再需要的名單後,您必須刪除它使用運營商

delete [] nodes; 

或者你確實可以爲這樣的結構分配一個指針陣列

Node **nodes = new Node *[100]; 

但是在這種情況下,數組中的每個元素都應該是一個指向動態分配對象的指針;

並刪除列表你在首先必須刪除每個對象在循環中所指向的數組例如元素

for (int i = 0; i < 100; i++) delete nodes[i]; 

,然後刪除該數組本身

delete [] nodes; 

當數組被分配時,初始化數組的每個元素爲零是個好主意

Node **nodes = new Node *[100](); 
+0

如果第二個,我將執行,刪除它,我會刪除[]節點或刪除[] []節點? –

+0

@Xari你需要一個for循環來刪除每個節點。然後'刪除[]'刪除「容器」 – 101010

+0

@Xari是否需要刪除數組元素指向的每個對象取決於您將如何編寫釋放列表的函數或析構函數。或者您手動需要使用delete刪除數組元素指向的每個對象。然後整個數組必須使用delete []刪除。 –

0

我建議你這樣的結構:

class myList { 

struct Node { 
string value; 
Node* next; 
} 

/*Public methods .. Add/Set/Get/Next/isEmpty.. etc ... */ 
Node* head, *tail; 
}; 

主: myList* lis = new myList[number]; 那麼你有名單的號碼!並通過做方法的和運營商,在課堂上所有的工作一樣,如果你想下一個節點只需要調用lis[0].getNext(); 如果你想跳過當前節點做lis[0].Next(); ...等等。

這如何工作的,你嘗試做看起來像C程序!