lvxuzhou


私信TA

用户名:lvxuzhou

访问量:96658

签 名:

lvxuzhou

等  级
排  名 48
经  验 11121
参赛次数 0
文章发表 56
年  龄 0
在职情况 学生
学  校 西安
专  业

  自我简介:

    1、简介:

     C语言不像高级语言c++、java、python那样已经提供容器和算法,比如:链表、队列、栈、二叉树、哈希表、集合、排序。往往都需要我们自己重新开始写,由于每个人的编程习惯都不一样,因此链表写法也各不同,这样就很难维护。那么有没有一个库已经实现常用数据结构和算法?当然有,在github上面找到一个国人写的挺不错的C语言通用数据结构和常用算法库libcstl


    libcstl是使用C语言编写的一个通用的数据结构和常用的算法库,它模仿C++ STL的接口和实现,支持vector, list, deque等等常用的数据结构,同时还支持排序,查找,划分等常用的算法,此外cstl也包含迭代器的类型,它作为容器和算法之间的桥梁。libcstl为C语言编程中的数据管理提供了便利。libcstl可以很好的运行在类Unix系统上,如Linux, FreeBSD等。 运行在Windows上时由于VC对C99的某些特性不支持,所以一些功能会受到限制。 接下来让我们学学如何使用libcstl吧!

   

   2、下载:

    libcstl下载地址:https://github.com/activesys/libcstl   懒得在github下载的同学加群:599151072  我已经下载好,上传到群里了。

   

   3、 编译和安装:

   以Ubuntu环境为例:

    第一步:将下载的压缩包 libcstl-master.zip 上传到Ubuntu环境

    第二步:解压,unzip libcstl-master.zip

    第三步:进入解压后的目录 cd libcstl-master 

                  ./configure

                  make

                  make install

   第四步:检查是否安装成功

                默认安装在/usr/local/lib/  路径下面,看到下面几个库说明安装成功了。

                QQ截图20210311233202.png

 

    4、libcstl用法

        以单向链表反转为例:

    #include <stdio.h>
    #include <cstl/cslist.h>      
    int main(int argc, char* argv[])
    {
        slist_t* pslist_l1 = create_slist(int); //创建链表
        slist_iterator_t it_l;                  //创建链表迭代器 用于遍历链表用
        if(pslist_l1 == NULL)
        {
                return -1;
        }
        slist_init(pslist_l1);                  //初始化链表
        slist_push_front(pslist_l1, 10);        //添加元素
        slist_push_front(pslist_l1, 20);
        slist_push_front(pslist_l1, 30);
        printf("l1 =");
        for(it_l = slist_begin(pslist_l1);!iterator_equal(it_l, slist_end(pslist_l1));it_l = iterator_next(it_l)) //for循环遍历
        {
                printf(" %d", *(int*)iterator_get_pointer(it_l));
        }
        printf("\n");
        slist_reverse(pslist_l1);               //链表反转
        printf("Reversed:\n");
        printf("l1 =");
        for(it_l = slist_begin(pslist_l1);!iterator_equal(it_l, slist_end(pslist_l1));it_l = iterator_next(it_l))
        {
                printf(" %d", *(int*)iterator_get_pointer(it_l));
        }
        printf("\n");
        slist_destroy(pslist_l1);               //销毁链表
        return 0;
    }

        编译:

        gcc test.c -lcstl

        运行结果如图:
        QQ截图20210311234640.png

        5、抛砖引玉

        libcstl开源库中的数据结构和算法非常丰富,我这里只是抛砖引玉,后续会继续更新,详细的用法请大家参考官方手册进行学习

        QQ截图20210311235334.png

        中文手册比较简单,英语手册比较全一点。我已经上传到 qq群:599151072

        

        

欢迎交流

个人QQ:757368775 

交流群:599151072

【注意】

添加好友时请注明“来自c语言网”


 

0.0分

3 人评分

  评论区

libcstl真香
2021-03-29 21:57:30
  • «
  • 1
  • »