simclist库使用初体验

最近的几个课题都是网络编程,发现链表非常常用。现在正在和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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章