FunctionGHW

立志成为真正程序员的码农,伪全栈,目前主要写C#

C语言通用数据结构_LinkedList

此链表为双向链表(Doubly-Linked List),LinkedList的声明稍微奇葩了些, 主要是为那些频繁的反复的插入节点和删除节点的应用而优化。对于其他的情况,性能应该会低一些。

设计思路是:如果删除了一个节点, 并不会立即free掉此节点,而是扔到节点池(nodes pool)里,等到创建新的节点时, 直接拿出来用而不用开辟新的空间,从而避免频繁的malloc操作,节点池其实就是个单向链表 (尽管里面的节点都有next和prev指针,我们只使用next)。一个明显的副作用就是空间开销可能会大些, 因此节点池的大小需要设置的合理些。

继续阅读

这几天浏览了很多人的博客,发现似乎有这么个规律: 大神的blog中代码很少甚至没有一行代码,且大多是写一些认真思考出来的东西, 而像我这样的新手blog好多都是"贴代码",有时候连两句"废话"都懒得扯。

莫非水平越高 代码 在博客内容中所占的比例就越少? 那就努力多写点思考的"成果"吧,也许这就是 大神之路 吧。

正文

这次整理的是我第一次用C写的文件复制程序。 那时候为了理解 流(Stream) 这个东西也算是费了心思了, 印象最深刻的便是把 流 比作 管道,数据通过管道流通。 到现在也不敢说完全理解,对新手而言,抽象的概念远不如具体的代码让人安心。

对这些抽象的概念,我的一点点体会就是, 一时不能理解没什么关系,多写代码体验一下,多思考,慢慢的也就悟出来了. 也许就像在 《.Net4.0面向对象编程漫谈》 一书中听金老师说的那样: 学习编程,大家都在"盲人摸象"。 我想,摸得多了,也就知道"大象"是什么样了。

继续阅读

最近整理旧blog的时候一直在想:要不要带上原文链接。现在决定还是加在文章最后吧,既然是自己写的(尽管很水),那么就留着对比一下吧,看看整理后的文章有多少提高。

 

这次的也是《数据结构基础(C语言版)(第2版)》(Fundamentals of Data Structures in C, 2nd)的一个练习题:给定n个布尔变量,打印所有可能的真值组合。 相当于求长度为n的位串有多少种。旧文用的方法太蛋疼了,位串长度稍稍增大,运行时间就变得不可接受了(那个时候还是图样啊),现在我尝试着写个好一点的。

继续阅读