Linux List_head list.h

1. 什么是双向链表? 每个家庭有爷爷0,爸爸0,儿子0,奶奶0,妈妈0,女儿0。爷爷0也有自己的爸爸1妈妈1,奶奶0也有自己的爸爸1妈妈1。

爸爸0脑袋有儿子0的信息,信息存在链表中,爸爸0通过链表的指针(就是个地址)找到儿子0。爸爸0想自己的爸爸了怎么办,那么根据脑袋的信息,在链表找爷爷0也是一件很容易的事情。也就是爸爸可以向前找,也可以向后找。这就是双向链表。当然妈妈也一样。最后就是一张混合的网。


2. 双向链表的基石是什么? 毋庸置疑当然是指针(地址)。正如邮政系统一样,根据各家各户的地址把信件、礼物、水果、淘宝各种奇葩物品送到各个人手中。


3. 双向链表一般用在哪里? VLC playlist可以放在双向链表;IPC视频Buffer信息可以放在双向链表;ATM取钱每一步都是双向链表在作怪,如果哪天你不高兴了,“ATM流程太死板,如果不需要插卡,看见人眼就吐钱多好啊”,那么这个时候就需要使用类似于深度学习的算法去检测人脸信息,然后根据数据库中存储的信息进行配对了,配对过程当然会涉及链表。


4. 在Linux/Unix/windows编程上,List是这样的通用:

include/list.h

1. INIT_LIST_HEAD(ptr) ;                         // 初始化双向链表头

2. list_add(struct list_head *new, struct list_head *head);    // 新节点添加到head之后,作为Head向后搜索的第一个节点

3. list_add_tail(struct list_head *add, struct list_head *head); // 新节点添加到Head之前,作为Head向前搜索的第一个节点

4. list_del(struct list_head *entry);                // 删除一个节点(list_del_init(struct list_head *entry))

5. list_empty(struct list_head *head);               //判断链表是否为空

6. list_for_each(pos, head);                          // 遍历链表,此时删除节点的操作可能会出错

7. list_for_each_safe(pos, pnext, head);                  // 遍历链表,可以同时有删除节点的操作

8. list_entry(ptr, type, member);                  // 遍历链表时取得数据项

9. list_for_each_entry(pos, head, member);              // 边遍历链表,边取数据。6,7,8的结合体


Icekirin.yuan - 冰火麒麟工作室

Q群:147565042



你可能感兴趣的:(大话-嵌入式应用)