寒假老师要求读五千行左右程序,我连程序都找不到


看你的问题,我就理解成:**一个程序,要求代码达到5000行左右**

大一的时候,做C语言作业的时候,接触到一个5000行的C程序,不过用到了GTK+库

想必老师要求5000行代码,应该是考虑到你们的水平的。看代码的时候随便学习一下GTK+库,应该不是问题。

介绍一下这个程序,如果你感兴趣就可以去看看。

弈心界面程序

https://github.com/accreator/Yixin-Board?

github.com

弈心引擎设计的图形用户界面

特性:基于GTK+的设计使得本程序可跨多种平台,支持Windows/Mac/Linux/BSD。开源(基于Simplified BSD协议)尽管本程序最初是为弈心设计的,它也支持与弈心协议兼容的引擎,如你可以在无禁规则下使用Tito等引擎。

这里的弈心引擎是一个五子棋的AI引擎,界面程序就是实现了五子棋的人机界面GUI。

界面程序

就是这个界面的实现写了大约5000多行C代码,全部写在一个main.c文件里面,这个应该符合题主的要求吧?

我大一的C作业也是写一个五子棋的界面,因为AI写不出来,就用了Yixin Engine(AI)。我写完后满打满算也就1000行代码左右...学到现在估计我还没写够5000行代码......

如何使用Yixin Engine还是从这个界面程序源代码里面找到的,不过Yixin Engine实在太强大的,我根本下不赢。

至于适合初学者这个条件,既然都是5000行代码了,怎么说也可以把初学者去掉了吧?


nginx 一个用C写的HTTP伺服器, 非常好的C代码, 把这个看明白, 你会学到很多东西,像HTTP协议是怎样的, linux上的socket server是怎么做的, 怎么做非同步, 怎么封装不同平台的差异, 如怎样做模块化设计, 怎么做依赖反转, 怎样用内存池来管理内存和对象的生命周期等等等等。既然你是初学者,建议配合一本UNIX环境高级编程来读。 可以去找nginx的早期版本0.7.x, 0.8.x来读, 因为最新的版本可能代码量太多,反而不如早期版本好读。

redis 一个用C写的k/v存储伺服器,同样是非常好的C代码, 这个里会涉及更多的持久化的数据结构。同样推荐读早期版本代码和配合UNIX环境高级编程来读。


我也来推荐个C语言容器库吧,包括顺序表、链接表、哈希表。虽然很小,但基本够用了,非常适合初学者研读。

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

github.com

快速入门

  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
", *(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 shouldnt free v again

destroy_SqList(l);

return 0;
}

详细内容

请参考test文件夹的测试代码,.h头文件中有对介面的详细说明。

链接表

顺序表

哈希表

需要注意到地方

因为所有数据都是以指针形式保存在容器之中的,所以请注意不要把局部变数保存在容器中,然后在作用域之外又继续使用它。

某些保存在容器中的数据可能是动态分配的,所有在将它们从容器中删除或清理掉之前一定要记得手动释放对应的内存空间。

向哈希表中添加数据时,key一定不能重复,否者会失败。所以最好在添加数据前先检查下key是否存在,如果存在需要先手动删除它。这样设计是为了避免直接覆盖原来的数据可能带来内存泄漏的风险。

由于容器中保存的是void型指针,所有从容器中获取到数据以后必须将它强制类型转换到你想要的数据类型。

版权声明:本文为CSDN博主「西城键客」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:C语言容器库,包括顺序表、链接表、哈希表。_C/C++_ghking1的专栏-CSDN博客


简单的 immediate GUI 实现。其实只有 2000 多行,但我怀疑你能不能在寒假里读完……

https://github.com/rxi/microui?

github.com


题主可以看下STL源码

InCTL C语言版STL容器库?

github.com

这个是我写的用C语言仿照STL实现的容器库

题主可以看自己感兴趣的容器比如tree_map hash_map,单个容器最多也就1k行

InSort C语言实现的混合排序演算法?

github.com

这个项目有两个高级排序演算法

intro sort GNU STL sort就是采用这个演算法

tim sort 在Python Java标准库中都有提供此演算法


推荐阅读:
相关文章