单项链接的接口问题
return 0;
8 }
9 return -1;
10 }为便于查阅,如程序清单3.29所示展示了slist.h文件的内容。
程序清单3.29 slist.h文件内容
1 #pragma once
2
3 typedef struct _slist_node {
4 struct _slist_node *p_next; // 指向下一个结点的指针
5 } slist_node_t;
6
7 typedef slist_node_t slist_head_t; // 头结点类型定义
8 typedef int (*slist_node_process_t) (void *p_arg, slist_node_t *p_node); // 遍历链表的回调函数类型
910 int slist_init (slist_head_t *p_head); // 链表初始化
12 int slist_add (slist_head_t *p_head, slist_node_t *p_pos, slist_node_t *p_node); // 添加一个结点
13 int slist_add_tail (slist_head_t *p_head, slist_node_t *p_node); // 添加一个结点至链表尾部
14 int slist_add_head (slist_head_t *p_head, slist_node_t *p_node); // 添加一个结点至链表头部
15 int slist_del (slist_head_t *p_head, slist_node_t *p_node); // 删除一个结点
16
17 slist_node_t *slist_prev_get (slist_head_t *p_head, slist_node_t *p_pos); // 寻找某一结点的前一结点
18 slist_node_t *slist_next_get (slist_head_t *p_head, slist_node_t *p_pos); // 寻找某一结点的后一结点
19 slist_node_t *slist_tail_get (slist_head_t *p_head); // 获取尾结点
20 slist_node_t *slist_begin_get (slist_head_t *p_head); // 获取开始位置,第一个用户结点
21 slist_node_t *slist_end_get (slist_head_t *p_head); // 获取结束位置,尾结点下一个结点的位置
22
23 int slist_foreach(slist_head_t *p_head, // 遍历链表
24 slist_node_process_t pfn_node_process,
25 void *p_arg);综合范例程序详见程序清单3.30。
程序清单3.30 综合范例程序
1 #include
2 #include "slist.
周立功 相关文章:
- 电源软启动的实用设计技巧(07-16)
- 周立功:动态分布内存——malloc()函数与calloc()函数(07-22)
- 周立功“程序设计与数据结构”:深度解剖动态分布内存的free()函数与realloc()函数(07-25)
- 周立功教你学程序设计技术:做好软件模块的分层设计,回调函数要这样写(07-30)
- 周立功教你学C语言编程:教你数组是如何保存指针的(07-31)
- 算法的泛化问题,这些坑你可能都经历过!|周立功教你学软件设计(08-01)