什么叫带头结点的链表? 什么叫不带头结点的链表?

2024-12-26 10:27:53
推荐回答(4个)
回答1:

带头结点的链表的第一个节点没有直接前驱,而不带头结点的链表有直接前驱。

数据结构中,在单链表的第一个结点之前附设一个结点,它没有直接前驱,称之为头结点。

它们的区别:

1、不带头结点的单链表对于第一个节点的操作与其他节点不一样,需要特殊处理,这增加了程序的复杂性和出现bug的机会,因此,通常在单链表的开始结点之前附设一个头结点。

2、带头结点的单链表,初始时一定返回的是指向头结点的地址,所以一定要用二维指针,否则将导致内存访问失败或异常。

3、带头结点与不带头结点初始化、插入、删除、输出操作都不样,在遍历输出链表数据时,带头结点的判断条件是while(head->next!=NULL)。


扩展资料

循环链表与单链表一样,一种链式的存储结构,所不同的是,循环链表的最后一个结点的指针是指向该循环链表的第一个结点或者表头结点,从而构成一个环形的链。

循环链表的运算与单链表的运算基本一致。所不同的有以下几点:

1、在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是象单链表那样置为NULL。此种情况还使用于在最后一个结点后插入一个新的结点。

2、在判断是否到表尾时,是判断该结点链域的值是否是表头结点,当链域值等于表头指针时,说明已到表尾。而非象单链表那样判断链域值是否为NULL。

双向链表其实是单链表的改进。当对单链表进行操作时,有时你要对某个结点的直接前驱进行操作时,又必须从表头开始查找。这是由单链表结点的结构所限制的。

因为单链表每个结点只有一个存储直接后继结点地址的链域,那么能不能定义一个既有存储直接后继结点地址的链域,又有存储直接前驱结点地址的链域的这样一个双链域结点结构呢?这就是双向链表。

在双向链表中,结点除含有数据域外,还有两个链域,一个存储直接后继结点地址,一般称之为右链域;一个存储直接前驱结点地址,一般称之为左链域。

参考资料来源:百度百科--头结点

参考资料来源:百度百科--链表

回答2:

带头结点的链表的第一个节点没有直接前驱,而不带头结点的链表有直接前驱。

数据结构中,在单链表的第一个结点之前附设一个结点,它没有直接前驱,称之为头结点。

它们的区别:

1、不带头结点的单链表对于第一个节点的操作与其他节点不一样,需要特殊处理,这增加了程序的复杂性和出现bug的机会,因此,通常在单链表的开始结点之前附设一个头结点。

2、带头结点的单链表,初始时一定返回的是指向头结点的地址,所以一定要用二维指针,否则将导致内存访问失败或异常。

3、带头结点与不带头结点初始化、插入、删除、输出操作都不样,在遍历输出链表数据时,带头结点的判断条件是while(head->next!=NULL),

而不带头结点是while(head!=NULL),虽然头指针可以在初始时设定,但是如1所述,对于特殊情况如只有一个节点会出现问题。

扩展资料:

头结点的作用:

头结点是链表里面第一个结点,他的数据域可以不存放任何信息(有时候也会存放链表的长度等等信息),他的指针区域存放的是链表中第一个数据元素的结点(就是传说中的首元结点)存放的地址。

1、防止单链表是空的而设的,当链表为空的时候,带头结点的头指针就指向头结点。如果当链表为空的时候,头结点的指针域的数值为NULL。

2、是为了方便单链表的特殊操作,插入在表头或者删除第一个结点。这样就保持了单链表操作的统一性!

3、单链表加上头结点之后,无论单链表是否为空,头指针始终指向头结点,因此空表和非空表的处理也统一了,方便了单链表的操作,也减少了程序的复杂性和出现bug的机会  。

参考资料来源:百度百科--头结点

参考资料来源:百度百科--链表

回答3:

我记得老师这样讲过
头结点的主要作用是用于定位整个链表,它不能存储链表的信息
但是可以存储一些特别的数据,比如说链表有多少个节点
它就像是一颗钉子一样
它在整个链表中通常被当做是一个常量,调用时几乎都是通过传值
有这样一个节点作为开始的链表叫做带头结点的链表
希望有所帮助

回答4:

头结点数据域不存放数据,头结点的下一个结点是链表的第一个元素,从第一个元素开始存储有效数据。