struct Node
{
int a;
struct Node *next;
};
next
如何动态地解决问题?我看了malloc
返回地址值 - 是吗?
请解释struct Node *next
。这是在结构中声明指针的默认方式吗?
答案 0 :(得分:1)
如果您有此声明
struct Node
{
int a;
struct Node *next;
};
然后您可以这样定义:
struct Node node = {1, 0};
或
struct Node *node = (Node*) malloc(sizeof(struct Node));
如果要将节点附加到next
成员,那么您可以这样说:
node.next = (Node*) malloc(sizeof(struct Node));
或
node->next = (Node*) malloc(sizeof(struct Node));
示例实验:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
struct Node
{
int a;
struct Node *next;
};
struct Node node1;
struct Node *node2 = (Node*) malloc(sizeof(struct Node));
node1.a = 1;
node2->a = 2;
node1.next = node2;
node2->next = (Node*) malloc(sizeof(struct Node));
node2->next->a = 3;
printf("node1.a = %d, node1->next->a node2->a = %d, node2->next->a = %d\n", node1.a, node2->a, node2->next->a);
}
答案 1 :(得分:0)
是的,你的声明是正确的。要理解它,请以这种方式看待它。当编译器想要知道什么样的指针时,它应该编译strcut的下一个字段。使用您提供的声明类型。由于编译器在进入此行之前已经解析了结构。它理解下一个指针类型也具有相同的结构类型。我希望这对你的理解有所帮助。
答案 2 :(得分:0)
起始点指向列表顶部,可在全局程序中使用。而下一个只是跟踪下一个项目,并在引用特定“节点”时可用。请参阅此图表,它可以帮助您通过视觉来理解!
link内部跟踪以下项目,该项目跟踪下一个组件的位置,因为它不一定与数组的方式连续。
+------+ +------+ +------+
| data | | data | | data |
+------+ +------+ +------+
| next |---->| next |---->| next |----> NULL
+------+ +------+ +------+
^
|
START (Keep track of the whole list.)
希望有助于澄清。