链表的基本知识1

本文解释了链表的基本组成,包括如何通过结构体定义链表节点,并详细阐述了链表节点中指针的作用及其如何实现链表的连续性。此外,还讨论了结构体声明时的一些常见错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链表的声明

首先要清楚链表是由数据和指向下一个地址的指针组成的。无论结构体里有多少个数据,必须要有一个地址指针。

typedef struct Node
{
    ElemType data;
    struct Node *next;
}Node;

为什么这个结构体声明为Node,结构体的指针域也是一个Node?

typedef struct Node
{
    ElemType data;
    xxx *next;
}Node;
上面这两个声明是等效的。struct Node *next;和xxx *next;都是一个占32bit或者64bit的数据类型。只有在后面使用Node后,struct Node *next;和xxx *next;才会有区别。

指针本身的大小是固定的,不是4字节就是8字节(编译器选x86就是4字节,选x64就是8字节)。


那为什么这个地址指针是用他本身声明的呢?

因为结构体本身中存放一个本身数据类型的指针,这个指针指向的地址也是一个具有数据和指针的结构体(也就是是本身结构体里面的内容),其目的显而易见,就是形成链表,可方便顺序访问查找。


而下面这个会报错,error: field ‘next’ has incomplete type。因为这个时候Node并没有定义完,编译器都不知道要给他分配多少内存空间。

typedef struct Node
{
    ElemType data;
    struct Node next;
}Node;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值