结构中的结构体在C中意味着什么?

时间:2013-02-01 22:34:15

标签: c pointers struct linked-list

以下代码应该在C中创建单链表。我希望了解insert_node对指针头的作用。每次调用insert_node时“head”指向什么?

struct node{
    int data;
    struct node* next; 
};
typedef struct node node;

    node* head = NULL; 

void insert_node(int data) {
    node *new_node = (node*) malloc(sizeof(node)); 
    new_node->data = data;
    new_node->next = head;
    head = new_node;
}

2 个答案:

答案 0 :(得分:4)

head将指向链表的开头(列表中的第一个条目)。要获取后续元素,只需按照next内的node指针。

每次添加新节点时,都会将新元素的next设置为当前head,并将head设置为新元素,以便将元素链接在一起。< / p>

答案 1 :(得分:2)

问:结构中的结构体在C中意味着什么?

答:在这种情况下,“struct node *”仅用作指针,指向“struct node”类型的列表项。

这是一个类型声明:

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

这是一个变量定义:node* head = NULL;这相当于说struct node * head = NULL;

这是一个变量赋值:node *new_node = (node*) malloc(sizeof(node));

变量“head”只是指向列表开头的指针。只要您想使用该列表,这就是您的“起点”:包括添加内容或在列表中查找内容。

“下一步”始终指向“列表中的下一项”。在初始化列表之前,“Head”为null。当它是列表中的最后一项时,每个“next”始终为null。

“Head”仅更改一次 - 初始化列表时。 “Next”更改两次:1)首次添加节点时设置为null,2)添加后续节点时重置为指向下一个节点。

'希望有所帮助..