算法和数据结构
猪的忧伤
时间不止,生命不息,学习不懈。
展开
-
集合的位图表示(C语言描述)
用位图表示集合的主要思路如下,比如说有一个小于16的非负整数的集合,例如:{1,8,9,3,15}可以在一个大于16bit的数据类型表示这个集合。第0bit位表示集合的数字0,第1bit位表示数字1,第nbit位表示集合数字n。若是对应的bit位被置位为1,则表示该集合存在对应的数值元素。假设机器上short为16位,在初始化后,各bit位如下所示:0000 0000 0000原创 2015-07-10 20:36:43 · 2828 阅读 · 0 评论 -
常见的几种内排序算法以及实现(C语言)
所有未排序的数组是经过检查合法的主要的内排序包括冒泡、插入、希尔、堆排序、归并、快速、桶排序等冒泡排序冒泡排序应该是排序中最简单的算法了主要思路如下:1: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。2:对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3:针对所有的元素重复以上的步骤,除了最后一个。原创 2016-05-18 18:43:02 · 14910 阅读 · 1 评论 -
栈的链表实现(C语言)
源码文件地址 :http://download.csdn.net/detail/mcu_tian/9530628由前面:http://blog.csdn.net/mcu_tian/article/details/51493081所述链表实现的栈在操作过程中频繁的pop和push会伴随着频繁的malloc和free,伴随着很大的系统开销。基于此,在此实现中,通过实现一个空闲节点链表,将p原创 2016-05-25 11:46:21 · 6343 阅读 · 0 评论 -
栈及实现(C语言)以及中缀式到后缀式的转换实例
栈是一种先进后出(后进先出)的线性表,其限制是仅允许在表的一端进行插入和删除运算。栈可以用链表实现,也可以用数组实现。在使用链表实现时,栈顶指针指向链表的前端节点,当栈顶指针为NULL时即为空栈。在进行插入操作时,将节点插入链表的前端节点,并将栈顶指针指向插入节点。在进行删除操作的时候,将节点栈顶指针指向的节点(非空)删除,栈顶指针指向后面的链表节点。使用链表实现栈的方原创 2016-05-24 20:13:48 · 2751 阅读 · 0 评论 -
二叉树(C语言)
树可以使用链表也可以用数组实现数组的实现通过下表与树的节点的序列对应,但是该方不够灵活,而且在C语言中,数组不进行下界检查,而且不能进行动态增长。在比较通用的实现方式使用的是树链表实现。对于大量的数据输入,链表的线性范文时间太慢,不宜使用,树的大部分操作的运行时间平均为O(log N)具体参照源码:二叉树二叉树是最简单、应用最广泛的树,通过构造表达式树,对表达式树的一些原创 2016-06-03 17:33:48 · 941 阅读 · 0 评论 -
二叉查找树的查找、插入、删除、释放等基本操作的实现(C语言)
二叉查找树是一种特殊性质的二叉树,该树中的任何一个节点,它的左子树(若存在)的元素值小于节点的元素值,右子树(若存在)的元素值大于节点的元素值。实现了二叉树查找树的实现以及基本操作,包括查找、插入、删除、初始化、释放等。源码下载地址:http://download.csdn.net/detail/mcu_tian/9548788二叉查找树节点的结构定义相比二叉树,二叉查找树的元素结原创 2016-06-14 11:31:39 · 9042 阅读 · 0 评论 -
AVL平衡树及插入操作的C语言实现
源码地址:http://download.csdn.net/detail/mcu_tian/9555855AVL平衡二叉树是一种特殊的查找树,是一种每个节点的左右子树深度不超过1。AVL是绝对平衡树,增删的操作复杂度过高,应用不如红黑树。AVL树的引入,就是为了解决二叉查找树的不平衡性导致时间复杂度大大下降。那么AVL就保持住了(BST)的最好时间复杂度O(logn),所以每次的插原创 2016-06-21 22:26:32 · 1203 阅读 · 0 评论