simclist库使用初体验

来源:互联网 发布:c语言异或符号 编辑:程序博客网 时间:2023/12/10 22:21

最近的几个课题都是网络编程,发现链表非常常用。现在正在和C语言热恋中,不太愿意再碰C++了,于是需要一个C语言的链表库。今天找到了一个叫做simclist的库,发现非常好用。在此分享一下。

这是官方网站。

先看最基本的用法:

#include "simclist.h"#include <stdio.h>int main(void){    list_t list;    int i;    list_init(&list);    scanf("%d", &i);    list_append(&list, &i);    printf("You input %d\n",        list_get_at(&list, 0));    list_destroy(&list);    return 0;}

如果仅此而已,只能把数据按地址存入,那么意义不大。
可以将数据按值复制到链表中。需要定义一个函数,用于把地址作为参数传入时,可以返回数据的大小。

同时,如果想要支持排序,则需要传入一个比较函数。

对于内置的数据类型,在库中都有现成的度量和比较函数。

现在看一下它的强大之处吧!存入了不定长的字符串!

#include "simclist.h"#include <string.h>#include <stdio.h>int main(void){    char str[20];    list_t l;    list_init(&l);    /*使用字符串度量函数,1表示每个节点的内存均要在删除时释放*/    /*只有这样才是按值存储*/    list_attributes_copy(&l, list_meter_string, 1);    /*使用字符串比较函数,可以支持sort操作*/    list_attributes_comparator(&l, list_comparator_string);    scanf("%s", str);    while(strcmp(str, "quit") != 0) {        list_append(&l, str);        scanf("%s", str);    }    /*如果第2个参数是-1,则是反向排序*/    list_sort(&l, 1);    /*迭代遍历操作*/    list_iterator_start(&l);    while (list_iterator_hasnext(&l)){        printf("%s\n", (char*)list_iterator_next(&l));    }    /*一定要有遍历结束的函数,否则其它的诸如append       的操作会出现问题*/    list_iterator_stop(&l);    /*释放所有的内存空间*/    list_destroy(&l);    return 0;}
1 0
原创粉丝点击