通用双向链表

Linux Kernel中的C语言技巧(1)

牧云@^-^@ 提交于 2020-02-29 08:15:05
先想想以下几个问题: 1. 如果给你n个B对象,你如何创建一个链表将这些数据组织起来? 常用方法是: struct B { data part; struct B *next; struct B *prev;//for doubly linked list } 2. 如果给你n个B和一个A,将A作为head将B组织成链表,如何实现? struct A { data part for A; struct B *next; struct B *prev;//for doubly linked list } 3. 如果在一个项目中,有很多如上的应用场景,An, Bn.....我们如何组织我们的代码呢? 如果如上实现,我们会发现,对于每一种链表,我们都需要写相应的代码,并且,代码虽然相似,却不同。 如 struct B1 { data part; struct B1 *next; struct B1 *prev;//for doubly linked list } struct B2 { data part; struct B2 *next; struct B2 *prev;//for doubly linked list } 这样做的结果,可想而知:大量重复的类似代码,维护和扩展的负担非常沉重。 如何解决这个问题呢?以下,简单介绍下,linux Kernel中的一种解决办法