C:使用malloc()设置链接列表

时间:2019-02-27 15:49:47

标签: c linked-list malloc nodes

我是链接列表的新手,并已完成以下任务:

  

编写一个程序,该程序创建10个int值的链表(范围   从1到10),使用malloc()。

”(这个问题还有其他部分,但与我坚持的内容无关)

我了解链接列表的概念,并且知道如何使用malloc()。但是,我不了解的部分是节点。

例如:如何在节点上使用malloc()以及->的含义。如果有人能解释节点如何工作以设置10个int值的链接列表,那就太好了。

2 个答案:

答案 0 :(得分:0)

我建议您看看linux kernel linked list implementation。它非常简单,可以适用于您的任务。多个开源项目可以根据需要使用此实现

答案 1 :(得分:0)

您基本上需要了解的是,您需要创建多个节点。让我们考虑4个节点。节点A,B,C和D。因此,malloc()的使用将在内存中保存这4个节点(显然不按顺序)。

这是一个链接列表,而不是顺序列表。这意味着您应该能够像通常在顺序列表中那样“访问”它,但是它们没有顺序地保存在内存中(硬件而言)。

因此:您的节点A将具有一个指针。该指针将指向节点B。相同的节点将指向节点B到达节点C,节点C到达节点D。

A-> B-> C-> D

请记住所有节点必须具有所需的任何内容以及指向下一个节点的指针,以便您可以从那里访问它。

这意味着节点A可以位于(想象中),存储器中的位置4,节点B在存储器中的位置16,节点C在存储器中的位置2和节点D在存储器中的位置300。

例如,使用struct的简单示例:

struct Node {
   int data;
   struct Node *next;
};

插入新节点时,只需更改指针:

  

A-> B-> C-> D E(您想将其插入第二个位置)。

因此,您需要更改指针。像这样:

 E=A->nextNode; //A is no longer pointing to B
B=E->nextNode; //Now E is pointing to B

要在询问时使用malloc:

struct Node* A= malloc(sizeof(struct Node));   
  struct Node* B = malloc(sizeof(struct Node));  

看看here会更好看