链式存储结构的头指针和头结点

来源:互联网 发布:linux修改系统环境变量 编辑:程序博客网 时间:2024/05/18 00:29

参考:点击打开链接


定义LinkList L;
则L为链表的头指针。
 L=(LinkList) malloc (sizeof(LNode)); //创建一个结点
此处返回给L的是一个指针,并且赋给了头指针
L->next=null; //这里说明我创建了一个头结点,即同时运用了头指针和头结点,不过感觉头结点用处不大,所以一般还是不用最好。

  假设L是LinkList型变量,则L为单链表的头指针,它指向表中的第一个结点(node[0])。若L为空(L=NULL),则所表示的链表为“空”表,其长度n为0。有时我们在单链表的第一个结点之前设一个结点,称为头结点。头结点的数据域可以不存储任何信息,也可以存储如线性表的长度等类的附加信息,头结点的指针域存储指向第一结点的指针(即第一个元素结点的存储位置)。

如下图所示,单链表的头指针指向头结点。若线性表为空表,则头结点的指针域为空。


由于有个童鞋问了个问题,所以在这里插入一些话: (头指针和头结点的疑问)

链表里有“头指针”变量,它存放一个地址,该地址指向一个元素。链表里的每个元素称为“节点”。
头节点是链表中第一个有效的节点,而不是用来存储第一个节点地址的头节点。
头指针在链表中必须有,而头结点不一定要有。
头指针作用:
就是存放数组地址,也即是链表地址。
头结点好处:
首先它是链表中的元素,是个有效的结点;
好处(1):对带头结点的链表,在链表中的任何位置插入或删除结点,要做的就是修改前一结点的指针域,因为任何结点都有前驱结点;如果链表中没有头结点,则首元素结点没有前驱,那么在其前插入或删除首元素结点时候,操作比较麻烦。
好处(2):对带头结点的链表,表头指针是指向头结点的非空指针,因为空表和非空表的处理是一样的。

原创粉丝点击