c的数据结构单链表的头一位为什么要空着

来源:百度知道 编辑:UC知道 时间:2024/06/22 06:23:28
如题
大虾们,具体点啊,举个例子

并不一定要空着,第一个结点(头结点)可以存放正常的数据,也可以存放链表的长度等信息,但为了操作的一致性,我们一般将链表的第一个结点留空,不存放数据。
这样做有两个好处:
1.你不用判断操作的位置是不是第一个结点,完全可以用一个统一的操作方法去执行操作。若没有这个头结点,那么对于第一个结点的引用,就应该用头指针来引用;若加上这个头结点的话,那么不管是第几个结点,其引用方法都是r.next->data。
2.对于空链表和非空链表也不用再区别操作了。若没有这个头结点的话,对空表的判断应该是头指针Head为空,而判断是否后移到最后一个结点的判断方法是r.next为空,操作不统一;若加上头结点后,那么就不用单独区分第一个结点的情况了,先赋初值后,判断是否移到最后一个结点的方法统一是r.next为空,而不管这个链表是不是空表。

借用“一枪爆三个”的说法:牺牲了一小块内存空间,却能使操作一致,节省操作时间。用空间换时间,你说应不应该?

你自己按我说的把遍历单链表的函数实现一下就明白了,要是不带头结点的话,就要分别考虑空表与非空表两种情况,而带头结点的话,就不用判断了。

为了操作的方便 牺牲一小块内存 节省时间
有了头结点 对链表第一个元素的操作就和其他元素的操作一样了
还有就是对于非空链表和空链表 头结点也使得他们的操作一致

其实头一位只是一个指针,在定义的时候,只定义为NODE *head;并未分配空间(比如说NODE *p;p=(NODE *)malloc(sizeof(NODE));p就分配了内存空间),真正的第一个有内容的结点应该是head->next!解答完毕!

并不一定要空,看你怎么用了。

2楼说的是对的