微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 使用迭代器如何实现指针前移或后移

使用迭代器如何实现指针前移或后移

时间:08-27 来源:周立功单片机 点击:

18              if(compare(it1, it_next) >

19                  swap(it1, it_next);                    // 交换内容

20                  flag = 0;                      // flag = 0,表示指针的内容已交换

21              } 

22              it1 = it_next;                       // it1 的下一个元素

23          }

24          if(flag)  return;                              // 没有交换,表示已经有序,则直接返回

25          iterator_prev(p_if, &it2);                       // it2向前移

26      }

27  } 

下面以一个简单的例子来测试验证基于迭代器的冒泡排序算法,详见程序清单3.57。将整数存放到双向链表中,首先将5、4、3、2、1分别加在链表的尾部,接着调用dlist_foreach()遍历链表,看是否符合预期,然后再调用算法库的iter_sort()排序。当排序完毕后链表的元素应该是从小到大排列的,再次调用算法库的dilst_foreach()遍历链表,看是否符合预期。

程序清单3.57  使用双向链表、算法和迭代器

1    #include

2    #include "iterator.h"

3

4    typedef struct _dlist_int{

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

6        int            data;                           // int类型数据

7    }dlist_int_t;

8

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

10  {

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

12      return 0;

13  }

14

15  static int __compare(iterator_t it1, iterator_t it2)

16  {

17      return ((dlist_int_t *)it1) -> data - ((dlist_int_t *)it2) -> data;

18  }

19

20  static void __swap(iterator_t it1, iterator_t it2)

21  {

22      int data = ((dlist_int_t *)it2) -> data;

23      ((dlist_int_t *)it2) -> data = ((dlist_int_t *)it1) -> data;

24      ((dlist_int_t *)it1) -> data = data;

25  }

26

27  int main(int argc, char *argv[])

28  {

29      iterator_if_t        iterator_if;

30      dlist_head_t         head;                           // 定义链表头结点

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

网站地图

Top