
C语言高级数据结构
文章平均质量分 78
C语言在实际编程中是怎么使用的,有哪些技巧,让C语言的水平上升一个等级
lotluck
我会成为你的眼睛,为你看清未来
展开
-
链表开始前的准备 之 tools(工具)、包裹函数
学习链表这么长时间了,趁着今晚有时间,感觉总结一下,这次真感觉跟着驰哥学习了不少的东西,对于这次链表,终于有了真正意思上写C语言的感觉吧,虽然买了C语言的接口与实现,不过现在没时间看,等链表这一块完全学习完在看吧。C语言也可以写的很漂亮的,组件化思想,也就是模块化,写一个东西就在里面套、套、套模块,有点像玩积木的感觉。不过开始写链表之前,先来一篇这个东西tools,简单说就是写一个工具,方便其他文原创 2015-12-07 19:23:27 · 644 阅读 · 0 评论 -
单链表的一些操作
在前一篇写了工具函数,以后的每篇几乎都会用到tools.h文件,如果在linux下编译就需要这样,举例 gcc list.c tools.c main.c -o main 把这3个文件编译链接成可执行文件main,linux下./main就可以运行了。 还是在开始提一下吧,为什么在销毁链表的时候需要用到双重指针,因为不仅要释放指针所指向的这快区域,还是把该指针释放了,因为free原创 2015-12-09 17:19:26 · 661 阅读 · 0 评论 -
浅析SkipList跳跃表原理及代码实现
SkipList在leveldb以及lucence中都广为使用,是比较高效的数据结构。由于它的代码以及原理实现的简单性,更为人们所接受。我们首先看看SkipList的定义,为什么叫跳跃表? “ Skip lists are data structures that use probabilistic balancing rather than strictly enforced balancing. As a result, the algorithms for insertion转载 2015-07-12 12:35:23 · 758 阅读 · 0 评论 -
带有控制信息的单链表
上一篇写了单链表,如果认真敲了代码,就可以看出里面从在很大的问题,想要删除尾部节点,必须还要遍历的链表,这时间复杂度也太高了吧,因此这篇会设计一个带有控制信息的单链表,一个指针指向链表的头部,一个指针指向链表的尾部,一个int变量记录链表节点的个数,这样就方便多了,主要看操作,哈哈,(最近get到主要看气质,也许长的丑才看气质,哈哈)。 头文件声明ctr_list.h #ifndef _CTR原创 2015-12-09 17:31:00 · 641 阅读 · 1 评论 -
双端链表
这次的双端链表还是比较通用的,因为前面的链表没有一点通用行,我的数据类型就仅仅在int的范围,这次通用的话,就可以存储各种数据类型,double,char,int , 图,二叉树,等等,起始只需要一个void *既可以搞定,因为这个可以指向任意的数据类型。 双端链表头文件的声明dlist.h #ifndef _DLIST_H_ #define _DLIST_H_ #include "too原创 2015-12-09 17:40:10 · 925 阅读 · 0 评论 -
用双端链表实现通用栈
这篇 还是双端链表基础上实现,这里面只是在套组件,套写过的东西,就需要重新组合一下而已,也许以后在公司也就是这个样子,感觉C语言越来越强大了,还需要好好搞搞C语言,关于栈,不想多BB,感觉说啥概念没意思了,也就是上代码,这是如何实现的 stack.h文件 #ifndef _STACK_H_ #define _STACK_H_ #include "dlist.h" #include "原创 2015-12-09 17:48:58 · 932 阅读 · 0 评论 -
双端链表实现队列
这次实现队列还是用到了双端链表,和上篇的一样,也是双端链表实现的,简单么,下面写好了,上面直接调用。现在redis竟然是用C语言写的,而且底层实现也是双端链表,这是非常重要滴 queue.h文件#ifndef _QUEUE_H_ #define _QUEUE_H_ #include "tools.h" typedef struct Queue { Dlist *dlist; /原创 2015-12-09 17:59:51 · 761 阅读 · 0 评论 -
动态数组的实现 及 迭代器
今晚把之前的动态数组敲了一遍,感觉还是有点生疏啊,都忘记的差不多了,开辟一个void **data的动态数组,里面存的是void *,这样也实现了通用性,然后呢里面用到了函数指针,写了接口,用户可以自己写,比如void (*free)(void *ptr),还有迭代器,可以遍历任何东西,今晚先用迭代器遍历这个动态数组,为了方便,我全部用存成整数,简单方便。 其实,这个里面呢,还有一原创 2015-12-10 21:13:39 · 1785 阅读 · 0 评论 -
双端链表实现hash(哈希)
hash表又称为散列表,很多的地方都用到了这个东西,js中的对象,java中的键值对,python中的字典,hash结合了数组和链表的优点,在查找,存储有很大的优势。以我的理解来说,通过相应的键,找到相对应的值,数组的优点快啊,存储采用链表,节省空间,插入删除方便,这次我用整数模拟一下,简单的hash函数,仅仅对数字进行取余,把取余相同的放在一个区域里面,也就是说,一个键可以对应多个值 h原创 2015-12-09 18:39:25 · 1472 阅读 · 0 评论 -
广义表的相关操作
这次是广义表,概念也不想多说了,网上很多,重复么啥意思,这次广义表的创建让我感觉几点处理的很巧妙,比如判断广义表的括号是否匹配呢,我的第一反应就是栈呢,因为之前写过逆波兰表达式,就是用栈处理了括号,但是这次就是用一个变量flag处理了,遇到左括号++,遇到右括号--,判断最后是否为0。 也许把广义表处理的最麻烦的地方哪个就是字符串了,把字符串专化成真正的广义表,也就是真实的存原创 2015-12-14 20:25:03 · 1334 阅读 · 0 评论