基础不牢,地动山摇!快学学C语言容器库吧,包括顺序表、链接表、哈希表。

C语言容器库

C语言容器库,包括顺序表、链接表、哈希表。

github下载地址, 欢迎star,提issue和PR。

快速入门

  1. 复制 .h 和 .c 文件到你的工程中
  2. 在你的源文件中包含对应的头文件
  3. 参考下面的示例使用
#include 
#include 
#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头文件中有对接口的详细说明。

链接表

基础不牢,地动山摇!快学学C语言容器库吧,包括顺序表、链接表、哈希表。_第1张图片

顺序表

基础不牢,地动山摇!快学学C语言容器库吧,包括顺序表、链接表、哈希表。_第2张图片

哈希表

基础不牢,地动山摇!快学学C语言容器库吧,包括顺序表、链接表、哈希表。_第3张图片

需要注意到地方

  • 因为所有数据都是以指针形式保存在容器之中的,所以请注意不要把局部变量保存在容器中,然后在作用域之外又继续使用它。
  • 某些保存在容器中的数据可能是动态分配的,所有在将它们从容器中删除或清理掉之前一定要记得手动释放对应的内存空间。
  • 向哈希表中添加数据时,key一定不能重复,否者会失败。所以最好在添加数据前先检查下key是否存在,如果存在需要先手动删除它。这样设计是为了避免直接覆盖原来的数据可能带来内存泄漏的风险。
  • 由于容器中保存的是void型指针,所有从容器中获取到数据以后必须将它强制类型转换到你想要的数据类型。

你可能感兴趣的:(C++编程)