微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 链表结点的数据结构该如何定义

链表结点的数据结构该如何定义

时间:08-20 来源:电子发烧友网工程师 点击:

到某个结点时,用户可能希望终止遍历,此时只要在回调函数中返回负值即可。一般地,若要继续遍历,函数执行结束后返回0。slist_foreach()函数的实现详见程序清单3.19。

程序清单3.19  遍历链表范例程序

1    int slist_foreach( slist_head_t        *p_head, 

2                   slist_node_process_t       pfn_node_process,

3                  void                  *p_arg);

4

5    { 

6         slist_node_t  *p_tmp, *p_end;

7         int          ret;

8

9             if ((p_head == NULL) || (pfn_node_process == NULL)){

10                 return -1;

11           }

12      p_tmp = slist_begin_get(p_head);

13      p_end = slist_end_get(p_head);

14        while (p_tmp != p_end){ 

15             ret = pfn_node_process(p_arg, p_tmp);

16             if (ret < 0)     return ret;                   // 不再继续遍历

17             p_tmp = slist_next_get(p_head, p_tmp);  // 继续下一个结点

18        }

19      return 0;

20  }

现在可以使用这些接口函数,迭代如程序清单3.14所示的功能,详见程序清单3.20。

程序清单3.20  管理int型数据的范例程序

1    #include

2    #include "slist.h"

3

4    typedef struct _slist_int { 

5         slist_node_t    node;                               // 包含链表结点

6         int             data;                                // int类型数据

7    }slist_int_t;

8

9    int list_node_process (void *p_arg, slist_node_t *p_node)

10  {

11        printf("%d  ", ((slist_int_t *)p_node)->data);

12        return 0;

13  }

14

15  int main(void)

16  {

17        slist_head_t  head;                                // 定义链表头结点

18        slist_int_t     nodel, node2, node3;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top