欢迎各界计算机爱好者加入,弘扬极客精神!

怎么理解链表的头指针?头结点?

0 喜欢 0 不喜欢
问题关闭原因: 回答过多
最新提问 12月 8, 2016 分类:SUPINFO课程 | 用户: charles (2,416 分)  
已关闭 12月 18, 2016 用户:Megan

11 个回答

0 喜欢 0 不喜欢

http://blog.csdn.net/mcgrady_tracy/article/details/32130421 供参考

链表头节点是一个节点,节点里包含数据和指向下一个节点的指针;而头指针是一个指针,它用来指向头节点

最新回答 12月 8, 2016 用户: Re (2,494 分)  
0 喜欢 0 不喜欢
线性表使用顺序(数组)存储时有个弊端,那就是在插入和删除时需要大量的移动数据,这显示是非常消耗时间的,所以可以采用链式存储,即有一个指针域(单链表),来记录下个结点的存储位置(地址),这样在插入和删除结点时只需要修改指针域即可,从而大量减少移动数据所消耗的时间。来看链表的定义: struct node { int data; struct node *next; }; 其中有两个元素,data为数据域,用于存储数据,next为指针域,用于存储下个结点的位置(地址)。那么什么是头指针呢?我们把指向第一个结点的指针称为头指针,那么每次访问链表时都可以从这个头指针依次遍历链表中的每个元素,例如: struct node first; struct node *head = &first; 这个head指针就是头指针。 这个头指针的意义在于,在访问链表时,总要知道链表存储在什么位置(从何处开始访问),由于链表的特性(next指针),知道了头指针,那么整个链表的元素都能够被访问,也就是说头指针是必须存在的。
最新回答 12月 8, 2016 用户: big and small (2,688 分)  
0 喜欢 0 不喜欢
最新回答 12月 11, 2016 用户: harryho97 (2,972 分)  
0 喜欢 0 不喜欢
头指针 指示链表中第一个结点(即第一个数据元素的存储映像)的存储位置。同时,由于最后一个数据元素没有直接后继,则线性链表中最后一个结点的指针为“空”(NULL)。
最新回答 12月 11, 2016 用户: Jinyoudi (542 分)  
2 喜欢 0 不喜欢

​头指针是以确定线性表中第一个元素对应的存储位置,一般用于处理数组、链表、队列等数据结构。单链表可以用头指针的名字来头指针命名。单链表中头指针指向第一个结点。头指针指向上述数据结构的起始数据的指针,如指向数组首地址的指针,指向链表表头节点的指针。

最新回答 12月 12, 2016 用户: SFGFDG (3,644 分)  
0 喜欢 0 不喜欢
最新回答 12月 12, 2016 用户: Zard (1,982 分)  
0 喜欢 0 不喜欢
头结点是指向链表中第一个结点的指针
最新回答 12月 15, 2016 用户: weini520aou (512 分)  
0 喜欢 0 不喜欢
指向第一个节点的。。。。
最新回答 12月 16, 2016 用户: Cunese (4,718 分)  
0 喜欢 0 不喜欢
头指针是指向表头的指针,头节点是存储表并且方便运算的节点
最新回答 12月 16, 2016 用户: Momo (6,398 分)  
0 喜欢 0 不喜欢
线性表使用顺序(数组)存储时有个弊端,那就是在插入和删除时需要大量的移动数据,这显示是非常消耗时间的,所以可以采用链式存储,即有一个指针域(单链表),来记录下个结点的存储位置(地址),这样在插入和删除结点时只需要修改指针域即可,从而大量减少移动数据所消耗的时间。来看链表的定义:

struct node {

 int data;

 struct node *next;

};

其中有两个元素,data为数据域,用于存储数据,next为指针域,用于存储下个结点的位置(地址)。那么什么是头指针呢?我们把指向第一个结点的指针称为头指针,那么每次访问链表时都可以从这个头指针依次遍历链表中的每个元素,例如:

struct node first;

struct node *head = &first;

这个head指针就是头指针。

这个头指针的意义在于,在访问链表时,总要知道链表存储在什么位置(从何处开始访问),由于链表的特性(next指针),知道了头指针,那么整个链表的元素都能够被访问,也就是说头指针是必须存在的。示例如下:

#include <stdio.h>

 

struct node {

 int data;

 struct node *next;

};

 

int main(void)

{

 struct node *head, first, second;

 

 head = &first;

 first.data = 1;

 first.next = &second;

 

 second.data = 2;

 second.next = NULL;

 

 while (head) {

  printf("%d\n", head->data);

  head = head->next;

 }

 return 0;

}

需要着重注意的是while那部分(通过头指针遍历完整个链表)。

 

那么什么又是头结点呢?很多时候,会在链表的头部附加一个结点,该结点的数据域可以不存储任何信息,这个结点称为头结点,

头结点的指针域指向第一个结点,例如:

struct node head, first;

head.next = &first;

那么这里的头指针又是谁呢,不在是指向第一个结点的指针,而是指向头结点的指针,例如:

struct node *root = &head;

即root指针才是头指针。示例如下:

#include <stdio.h>

 

struct node {

 int data;

 struct node *next;

};

 

int main(void)

{

 struct node *root, head, first, second;

 

 root = &head;

 root->data = 0;

 root->next = &first;

 

 first.data = 1;

 first.next = &second;

 

 second.data = 2;

 second.next = NULL;

 

 while (root) {

  printf("%d\n", root->data);

  root = root->next;

 }

 

 return 0;

}

 

注:在Linux kernel中,定义头结点使用宏LIST_HEAD。

转自http://m.blog.csdn.net/article/details?id=32130421
最新回答 12月 18, 2016 用户: ywen232622 (422 分)  
...