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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章