我是大甲鱼 发表于 2018-9-4 11:30:53

链表的第一个节点是从0开始还是1开始

struct list
{
        int num;
        struct list *next;
};
typedef struct list list_single;

int main()
{
        list_single *head;
        return 0;
}
///程序不完整只做例子用
问题1:
比如 头结点---->节点1--->节点2---->节点3........---->节点n
链表的第一个节点是像数组0开始还是从1开始;

问题2:
在一般的应用中,头结点仅仅是作为一个头结点指针用(只给头节点的指针域赋值head->next=temp);
还是头结点就作为一个链表中有用的成员(给节点的数据域和指针域赋值head->next=temp,head->num=0)

露转溪桥 发表于 2018-9-4 11:36:43

本帖最后由 露转溪桥 于 2018-9-4 11:40 编辑

有头结点的链表,在链表的物理地址中,第一个节点就是头结点,但头结点的数据域不存任何内容,指针域存在一个指向第一个有效节点的地址 。
运算过程中的第一个节点比如数组0指的是第一个有效内容的节点

claws0n 发表于 2018-9-4 11:50:56

1. 看个人喜好,对用户来说基本上是被封装成 0 开始的。至于程序内部要如何安排,就看程序员。链表的结构简单,没有特别要求。有些结构则会在内部安排第一个成员为 1,使得索引遍历更为方便程序员的维护。
2. 链表中的 head 就像是一个队列的领队。领队有没有用处?看情况 XD。你这个是头插法,所以它重要~

星球杯 发表于 2018-9-4 12:42:31

claws0n 发表于 2018-9-4 11:50
1. 看个人喜好,对用户来说基本上是被封装成 0 开始的。至于程序内部要如何安排,就看程序员。链表的结构简 ...

同意!

我是大甲鱼 发表于 2018-9-4 14:57:56

claws0n 发表于 2018-9-4 11:50
1. 看个人喜好,对用户来说基本上是被封装成 0 开始的。至于程序内部要如何安排,就看程序员。链表的结构简 ...

那么在实际的工作中多数是使用仅仅将头指针作为一个指针(数据域不赋值)用。还是作为一个数据域赋值的节点。小甲鱼的视频里就是头指针数据域也赋值了的

claws0n 发表于 2018-9-4 15:08:38

我是大甲鱼 发表于 2018-9-4 14:57
那么在实际的工作中多数是使用仅仅将头指针作为一个指针(数据域不赋值)用。还是作为一个数据域赋值的节 ...

看你喜欢,基本上不需要赋值,如果赋值的话,应该是计数器
   head
------>[ e1 |   ]------>[...]------>[ NULL ]


老师是用 ,但是这个结构只有两个成员,data 和 next   [ data | next ]。只不过称这个结点为头结点而已。
页: [1]
查看完整版本: 链表的第一个节点是从0开始还是1开始