爸爸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