问题:在单链表中使用“头结点”,这个哑陆袜腊结点始终是链表的第一个元好汪素,这个技巧的利与弊?
链表中第一个结点的存储位置叫做头指针,那么整个链表早滑的存取就必须从头指针开始进行了。之后的每一个结点,其实就是上一个的后继指针指向的位置。
链表中第一个结点的存储位置叫做头指针
头指针和头结点不同,头结点即第一个结点,头指针是指向第一个结点的指针。链表中可以没有头结点,但不能没有头指针。
如果链表有头结点,那么头指针就是指向头结点数据域的指针。
单链表也可以没有头结点,没有头结点的单链表
为了使空链表与非空链表处理一致,我们通常设一个头结点。
一、两者区别:
1、不带头结点的单链表对于第一个节点的 *** 作与其他节点不一样,需要特殊处理,这增加了程序的复杂性和出现bug的机会,因此,通常
在单链表的开始结点之前附设一个头结点。
2、带头结点的单链表,初始时一定返回的是指向头结点的地址,所以一定要用二维指针,否则将导致内存访问失败或异常。
3、带头结点与不带头结点初始化、插入、删除、输出 *** 作都不样,在遍历输出链表数据时,带头结点的判断条件是while(head->next!=NULL),
而不带头结点是while(head!=NULL),虽然头指针可以在初始时设定,但是如1所述,对于特殊情况如只有一个节点会出现问题。
作用:
1、防止单链表是空的而设的。当链表为空的时候,带头结点的头指针就指向销卖头结点.如果当链表为空的时候,头结点的指针域的数值为NULL。
2、是为了方便单链表的特殊 *** 作,插入在表头或者删除第一个结点.这样就保持了单链表 *** 作的统一性!
3、单链表加上头结点之后,无论单链表亏颤逗是否为空,头指针始终指向头结点,因此空表和非空表的洞模处理也统一了,方便了单链表的 *** 作,也减少了程序的复杂性和出现bug的机会 。
4、对单链表的多数 *** 作应明确对哪个结点以及该结点的前驱。
节点的存储位置由指针表示。
扩展资料:
链接存储方法
链接方式存储的线性表简称为链表(Linked List)。
链表的具体存储表示为:
①、 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)
②、 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link))。
链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线性的数据结构。
参考资料:百度百科-单链表
参考资料:百度百科-头结点
A举个例子,假如我们写一个实现链表删除一个元素的哗档嫌函数(或过蠢汪程),供共享用,函数的参数有2个,一个指针变量(指向链表的头结点),一个字符变量(待删除的元素)。通过链表头结点的指针传给函数的第乱手一个指针变量参数,就可方便实现是哪一个链表的 *** 作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)