本节课时介绍第二种重要的数据结构:双向链表。该数据结构会在整个系统中广泛使用,无论是任务、存储块等均使用该数据结构进行组织和管理。因而理解该数据结构的原理及工作流程非常必要。
如果你之前没有接触过链表,可以先找本C语言的书来看,上面一般会有关于链表的介始。这些书中的链表相对而言要简单一些。待理解了书中链表结构之后,再来学习本课程中另一种链表的实现。
主要内容
本课时中主要介绍的是可双向访问的通用链表。该链表非常灵活,可用于任何自定义的结构中。
重点难点
课程的难点在于理解链表各个接口的实现代码。在学习过程中,请结合视频、代码,然后再在纸上画一下具体操作过程,这样会更有助于理解,单凭看代码是难以理解的。
头脑中一定要有链表操作的相关过程变化图像,才能掌握和理解此部分内容。
注意事项
常见问题
tNodeParent()是否会写0地址处数据
Q:tNodeParent()直接将地址0转换成parent变量,之前地址0处的数据不会丢失么。
#define tNodeParent(node, parent, name) (parent )((uint32_t)node - (uint32_t)&((parent )0)->name)
A:不会的,只是强制类型转换生成定样一个指向特定结构的指针,只不过地址是0而已。parent *)0,只是认为0地址处存放着一个类型为Parent的变量/结构体之类,不存在变量的分配
(tNode *)0这个怎么理解啊
Q:(tNode *)0这个怎么理解啊
A:强制类型转换,或者链表里的空指针。具体翻下c语言的教材