gperf完美散列
完美散列是可以将散列表的最坏运行时间控制在单位时间内的一种散列方法,而gperf就是一种可以针对给定不变的关键字来自动生成完美散列函数和散列表的一种工具
散列表之开放定址法
在散列表里面经常发生散列值冲突,为了解决散列冲突问题,开放定址法是一种简单又高效的方法
散列表之链接法解决冲突
散列表在进行映射的时候经常会发生冲突,这里采用链接法来解决链接法映射冲突带来的问题
直接寻址法
直接寻址法是一种比较简单的寻址方法,对数据的键值直接映射进行寻址,删除,插入,查询操作都可以在O(1)的时间之内完成
vimrc配置文件
vimrc的强大配置文件,搭配多个插件使用,如omniCppComplete,TagList以及cscope等软件
链表_LINKLIST
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
顺序队列的实现
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头
C语言实现链式栈的模板
在C语言里面没有模板一说,这里通过用一些极为巧妙的方法来实现了类似于C++的模板功能,使得链式栈的数据可以通过实际需要的类型来决定
链式栈实现
链式栈是栈的一种类型,实现是通过链表来实现,这里给出了C++模板实现的栈
顺序栈实现
顺序栈是栈的一种类型,这里采用C++的模板来实现顺序栈
选择算法实现代码
选择算法就是用来解决在一堆数里面选出第k大的数的问题。选择算法的设计方法有很多,比如将这堆数据先进行排序,然后取出对应的第k个元素就可以了,这种算法的平均运行时间为O(nlogn),说慢不满,说快也不快。我们将在后面的内容里面介绍一种在线性时间O(n)内就可以完成选择的算法。
桶排序_BUCKETSORT
桶排序,顾名思义就是运用桶的思想来将数据放到相应的桶内,再将每一个桶内的数据进行排序,最后把所有桶内数据按照顺序取出来,得到的就是我们需要的有序数据,可以在线性时间O(n)内完成排序工作
基数排序_RADIXSORT
基数排序的排序工作在线性时间之内就可以完成,速度非常之快,这里给出了基于计数排序和桶排序的两种类型的基数排序算法
zsh与oh-my-zsh终极配置文件
zsh是众多shell里面比较强大的一个,有强大的补全功能,绚丽的颜色配置,传统的bash在它面前都显得没有任何光彩,最重要的就是兼容bash,但是又比bash好用,这里是基于oh-my-zsh的一个强大的配置文件
赫夫曼编码
赫夫曼编码对数据的压缩很有作用,大约可以压缩20%~90%,主要由文件的数据特性决定的!这里是赫夫曼编码的具体实现,主要借助二叉树和优先队列来实现最优前缀编码,也就是赫夫曼编码,赫夫曼
GunMakefile
gun makefile 手册,了解makefile是能掌握掌握整个工程的必备技能!