2015-11-19 145 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程序!