基礎不牢,地動山搖!快學學C語言容器庫吧,包括順序表、鏈接表、哈希表。

C語言容器庫

C語言容器庫,包括順序表、鏈接表、哈希表。

github下載地址, 歡迎star,提issue和PR。

快速入門

  1. 複製 .h 和 .c 文件到你的工程中
  2. 在你的源文件中包含對應的頭文件
  3. 參考下面的示例使用
#include <stdlib.h>
#include <stdio.h>
#include "sqlist.h"

int main(int argc, char **argv)
{
    SqList l;
    SqListElement * e;
    void *temp;
    int  *v=NULL;

    init_SqList(&l);

    v = (int*)malloc(sizeof(int));
    *v = 9;
    pushBack_SqList(&l, v); //v is a point, all container save point to real data

    e = getFirst_SqList(&l);        
    printf("%d\n", *(int*)(e->value_point));  //value_point is void*, so we should transform it to int*

    temp = popBack_SqList(&l);
    free(temp);                 //here we freed temp, so we shouldn't free v again

    destroy_SqList(&l);

    return 0;
}

詳細內容

請參考test文件夾的測試代碼,.h頭文件中有對接口的詳細說明。

鏈接表

在這裏插入圖片描述

順序表

在這裏插入圖片描述

哈希表

在這裏插入圖片描述

需要注意到地方

  • 因爲所有數據都是以指針形式保存在容器之中的,所以請注意不要把局部變量保存在容器中,然後在作用域之外又繼續使用它。
  • 某些保存在容器中的數據可能是動態分配的,所有在將它們從容器中刪除或清理掉之前一定要記得手動釋放對應的內存空間。
  • 向哈希表中添加數據時,key一定不能重複,否者會失敗。所以最好在添加數據前先檢查下key是否存在,如果存在需要先手動刪除它。這樣設計是爲了避免直接覆蓋原來的數據可能帶來內存泄漏的風險。
  • 由於容器中保存的是void型指針,所有從容器中獲取到數據以後必須將它強制類型轉換到你想要的數據類型。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章