链表是我们学习C语言避不开的问题,就让我们一起飞过去看看吧:
1 定义链表
链表是C语言编程中常用的数据结构,比如我们要建一个整数链表,一般可能这么定义:
struct int_node {
int val;
struct int_node *next;
};
2 定义功能函数
为了实现链表的插入、删除、遍历等功能,另外要再实现一系列函数,比如:
void insert_node(struct int_node **head, int val);
void delete_node(struct int_node *head, struct int_node *current);
void access_node(struct int_node *head)
{
struct int_node *node;
for (node = head; node != NULL; node = node->next) {
// do something here
}
}
如果我们的代码里只有这么一个数据结构的话,这样做当然没有问题,但是当代码的规模足够大,需要管理很多种链表,难道需要为每一种链表都要实现一套插入、删除、遍历等功能函数吗?
熟悉C++的同学可能会说,我们可以用标准模板库啊,但是,我们这里谈的是C,在C语言里有没有比较好的方法呢?
Linux内核中一般使用双向链表,声明为struct lis