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/ 路径下面,看到下面几个库说明安装成功了。
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
运行结果如图:
5、抛砖引玉
libcstl开源库中的数据结构和算法非常丰富,我这里只是抛砖引玉,后续会继续更新,详细的用法请大家参考官方手册进行学习
中文手册比较简单,英语手册比较全一点。我已经上传到 qq群:599151072
欢迎交流
个人QQ:757368775
交流群:599151072
【注意】
添加好友时请注明“来自c语言网”
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复