周立功阐释高效的双向链表如何用
19 dlist_int_t node1, node2, node3;
20 dlist_init(&head);
21
22 node1.data = 1;
23 dlist_add_tail(&head, &(node1.node));
24 node2.data = 2;
25 dlist_add_tail(&head, &(node2.node));
26 node3.data = 3;
27 dlist_add_tail(&head, &(node3.node));
2829 dlist_del(&head, &(node2.node)); // 删除node2结点
30 dlist_foreach(&head, list_node_process, NULL); // 遍历链表,用户参数为NULL
31 return 0;
32 }与单向链表的综合范例程序比较可以发现,程序主体是完全一样的,仅仅是各个结点的类型发生了改变。对于实际的应用,如果由使用单向链表升级为双向链表,虽然程序主体没有发生改变,但由于类型的变化,则不得不修改所有程序代码。这是由于应用与具体数据结构没有分离造成的,因此可以进一步将实际应用与具体的数据结构分离,将链表等数据结构抽象为"容器"的概念。
在公众号后台回复关键字"程序设计",即可在线阅读《程序设计与数据结构》;回复关键字"编程",即可在线阅读《面向AMetal框架与接口的编程(上)》。
- 电源软启动的实用设计技巧(07-16)
- 周立功:动态分布内存——malloc()函数与calloc()函数(07-22)
- 周立功“程序设计与数据结构”:深度解剖动态分布内存的free()函数与realloc()函数(07-25)
- 周立功教你学程序设计技术:做好软件模块的分层设计,回调函数要这样写(07-30)
- 周立功教你学C语言编程:教你数组是如何保存指针的(07-31)
- 算法的泛化问题,这些坑你可能都经历过!|周立功教你学软件设计(08-01)
