数据结构(C语言版)记录
文章平均质量分 88
JohnnyHu90
这个作者很懒,什么都没留下…
展开
-
3.3.5 单链表的比较
单链表之间的比较1234567891011121314151617181920212223242526272829303132333435363738394041424344454647原创 2013-08-20 09:33:12 · 1758 阅读 · 0 评论 -
9.6.1 哈希查找之分离链接哈希表解决哈希碰撞(2)
本例函数比较经典,但个别函数仍需优化:下面是代码示例:123456789101112131415161718192021222324252627282930313233343536373839404142原创 2013-09-01 07:23:31 · 1206 阅读 · 0 评论 -
9.4 费氏查找
费氏查找(Fibonacci Searching): 类似于折半查找(Binary Searching),只不过折半查找是运用除法运算减少查找范围,而费氏查找则采用了加减运算,所以理论上费氏查找的效率优于折半查找。必须明确的几个概念:(总结点 )n 由a确定最初的几个值:root = F(a - 1);distance_1 = F(a - 2);distance_2 = F原创 2013-08-29 09:27:23 · 1444 阅读 · 0 评论 -
9.6.2 哈希查找之开放定址法解决哈希碰撞
开发定址法:(1) 线性探测法:逐个探测每个单元(必要时绕回)以查找出一个空单元。典型的冲突函数 F(i) = i;缺点: 容易产生一次聚集(primary clustering);(2) 平方探测法:典型的冲突函数是:F(i) = i2,消除线性探测一次聚集的冲突解决办法。定理:使用平方探测,且表的大小为素数,那么当表至少一半空的时候,总能够插入一个新元素。缺点:容原创 2013-09-01 12:56:13 · 4042 阅读 · 0 评论 -
9.6.1 哈希查找之分离链接哈希表解决哈希碰撞(1)
链表解决哈希碰撞就是在发生哈希碰撞时,在现有的地址再串联一个新的链表存储数据。下面是简单的示例代码:123456789101112131415161718192021222324252627282930313233343536原创 2013-08-31 11:15:27 · 2043 阅读 · 0 评论 -
7.8 赫夫曼树应用解析(跟结点到叶子求每个字符的赫夫曼编码)
其他部分同 7.7 赫夫曼树应用解析(叶子到根逆向求每个字符的赫夫曼编码)的编码,只更改HuffmanCoding函数来实现:如下12345678910111213141516171819202122232425262728293031原创 2013-08-26 22:20:42 · 2132 阅读 · 0 评论 -
8.1 内部排序法---插入类排序(直接插入、折半、希尔)
插入类排序可以分为三种:直接插入、折半插入、以及希尔排序。原理暂先忽略,以后再补。时间复杂度:直接插入排序:O(n^2)、折半插入排序:O(n^2)、希尔排序:O(n^3/2);下面是相关的示例:123456789101112131415161718192021222原创 2013-09-03 08:24:41 · 962 阅读 · 0 评论 -
8.2 内部排序法---选择类排序(简单选择、堆排序)
选择类排序:分为简单选择排序、堆排序; 其时间复杂度度分别为:O(n^2)、O(nlogn).简单选择排序:每一趟从待排序元素中选出最小(或最大)的一个元素,依次存放在已经有序的元素的最后,直到全部待排序的元素全部有序为止!堆排序:利用堆的特性对元素进行排序。主要分为两部分:创建堆大顶堆(或小顶堆)、调整堆。下面示例代码:123456原创 2013-09-03 18:49:26 · 1080 阅读 · 0 评论 -
8.5内部排序法---分配类排序(基数排序)
分配类排序与前面介绍的排序方法 ,它不是比较元素的大小,然后交换元素,而分配类排序算法主要包括分配和收集两个部分。基数排序是常用的分配类排序算法。基数排序:是一种多关键字排序算法,基数排序的实现由3个部分组成:初始化静态链表、分配和收集。时间复杂度为 : Ω(n·log2(n)) = Ω(n·log n) 下面是其操作: C++ Code 12原创 2013-09-10 17:10:08 · 1146 阅读 · 0 评论 -
8.4 内部排序法---归并类排序
归并类排序:归并类排序是指将两个或多个有序表合并为一个有序表。其中,将两个有序表合并为一个有序表的排序称为二路归并排序。二路归并排序算法实现可以分为两个过程:将待排序的元素序列划分为子表。1、将待排序元素序列划分为子表。2、合并两个相邻的子表为有序表。具体操作代码如下:123456789101112原创 2013-09-09 20:29:20 · 949 阅读 · 0 评论 -
8.3 内部排序法---交换类排序(冒泡、快排)
交换类排序:主要是不断的比较两个元素的大小并交换其原始的位置,完成一趟排序之后,最大的元素(或最小的元素)被排在最后(或者最前)。重复以上操作若干趟后,元素序列成为一个有序序列。主要有冒泡排序和快速排序。时间复杂度分别为:O(n^2)和O(nlogn)。冒泡排序思想:依次比较两个相邻的数,把较小的数放在前面,把较大的数放在后面。快速排序的思想:快排不是比较两个相邻的元素,而是将指定的元素与原创 2013-09-04 15:41:14 · 1669 阅读 · 0 评论 -
C_C+++常用算法整理+可运行
C_C+++常用算法整理(先放在这儿,以后总结)12345678910111213141516171819202122232425262728293031323334353637383940414243原创 2013-10-08 18:49:55 · 8574 阅读 · 1 评论 -
C/C++ 排序算法大全代码
C/C++ 排序算法大全代码输出结果:原创 2013-10-08 19:01:39 · 2232 阅读 · 0 评论 -
8.0 何谓排序
排序:就是将一群数据,依指定的顺序所进行的从大到小(或从小到大)的排列过程;排序特性:排序过后,能使值相同的数据,保持原顺序中相对位置为稳定性排序。反之,则为不稳定性排序。排序分类:(1)内部排序:将欲处理的数据整个存放到内部 (2)外部排序:欲处理的数据量过于庞大,无法全部存放到内部存原创 2013-09-02 18:11:06 · 767 阅读 · 0 评论 -
9.3 折半查找
折半查找(Binary Searching) 又称为对分查找(二分查找),是在查找表有序(升序或降序排列)的情况下进行的静态查找(即无添加、删除);其查找过程是:先确定待查记录所在的范围,然后逐步缩小范围直到找到或找不到该记录为止。注意点:折半查找的效率比顺序查找的高,但折半查找只适用于有序表,其限于顺序存储结构(数组形式存储),对线性链表无法有效的进行折半查找。折半查找时间复杂度:原创 2013-08-28 10:31:39 · 1829 阅读 · 0 评论 -
面试考题之9.1:数组与字符串(C/C++版)
1.1 实现一个算法,确定一个字符串的所有字符是否全部不同。假如不允许使用额外的数据结构,又该如何处理?解决方案: C++ Code 1234567891011121314151617181920212223242526272829303原创 2015-06-05 12:44:37 · 2000 阅读 · 2 评论 -
9.6 哈希查找(杂凑查找)
哈希查找(Hash Searching)也叫杂凑查找:是一种可以让数据的比较次数减少到每次只需查找一次就能找到数据的方法。散列:要进行哈希查找,就必须构造哈希表(hash table,也叫散列表),通常哈希表的构造实现过程就叫做散列。哈希函数:用于处理哈希表的函数,哈希函数的构造方法有很多,常用的构造哈希函数的方法有:1. 直接定址法;2. 数字分析法;3. 平方取中法:4原创 2013-08-30 21:54:45 · 2175 阅读 · 0 评论 -
9.5 插补查找
插补查找(Interpolation Searching): 类似与折半查找,只不过和欲查找数据比较的不是中间项,而是以内插法按照比例所选出来的一项。如果low为数据的左边边界(下限),high为数据的右边边界(上限),keyValue为欲查找值,该值位于low和high之间,data[low]和data[high]分别为数据的左右边界值,那么,如果设middle为与欲查找值做比较的数据位置。原创 2013-08-30 09:20:20 · 1099 阅读 · 0 评论 -
3.3.3 单链表的反转
链表存从头至尾反转过来!12345678910111213141516171819202122232425262728293031323334353637383940414243444546原创 2013-08-16 17:23:55 · 761 阅读 · 0 评论 -
3.3.4 单链表的链接
链接两个单链表:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647原创 2013-08-20 08:32:06 · 891 阅读 · 0 评论 -
4.1 何为堆栈
堆栈数据结构的特性是:只允许数据自有表的一个固定端做输入、输出动作。如此一来就有的先进先出(FIFO)特性。堆栈的应用相对多,几种较常见的是:1. 子程序调用:2.处理递归调用;3.表达式转换与求值;4. 二叉树遍历;5. 图形深度优先追踪法。原创 2013-08-22 10:30:43 · 855 阅读 · 0 评论 -
4.2 堆栈的数组实现
用数组实现堆栈的简单操作:12345678910111213141516171819202122232425262728293031323334353637383940414243444546原创 2013-08-22 10:35:35 · 753 阅读 · 0 评论 -
2.6 一维数组的高级应用之运用数组创造出更大的存储空间
程序实例:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748原创 2013-08-12 10:08:31 · 1141 阅读 · 0 评论 -
5.2 队列的链表实现
队列操作的链表实现:123456789101112131415161718192021222324252627282930313233343536373839404142434445464原创 2013-08-24 18:46:22 · 6740 阅读 · 1 评论 -
4.3 堆栈的链表实现
链表堆栈的简单操作:链表创建一个空栈 满足两点:1. 建立一个头结点。2.设置next指针为NULL1234567891011121314151617181920212223242526272829303132333435原创 2013-08-22 13:42:06 · 709 阅读 · 0 评论 -
3.2.2 单链表类节点的释放
本程序在于演示最基础单链表的Node(节点)内存分配与释放12345678910111213141516171819202122232425262728293031323334353637383940414243原创 2013-08-13 13:03:52 · 1386 阅读 · 0 评论 -
3.2.3 单链表的建立与释放
代码如下:注意点:本程序在VS2010下,114行" Link Head = NULL; // Node声明并初始化" 的Head必须初始化后才能作为参数传递给Create_List函数,但在GCC编译器下,可以不进行初始化,为了兼顾兼容,严谨性,最好事先初始化。123456789101112131415原创 2013-08-13 17:36:11 · 7039 阅读 · 0 评论 -
3.2.4 单链表的查询
简单的单链表查询示例:12345678910111213141516171819202122232425262728293031323334353637383940414243444546原创 2013-08-13 20:28:52 · 1367 阅读 · 0 评论 -
3.3.1 单链表内节点的插入
单链表节点的插入有三种情况:1、插入在链表开头、中间和结尾; // 以下示例12345678910111213141516171819202122232425262728293031323334353637383原创 2013-08-14 10:29:35 · 797 阅读 · 0 评论 -
7.7 赫夫曼树应用解析(叶子到根逆向求每个字符的赫夫曼编码)
赫夫曼树(Huffman):又称最优树,是一类带权路径长度最短的树。带权路径长度最小的二叉树称作最优二叉树或赫夫曼树。带权路径的计算:记做WPL是路径长度和节点上权的乘积。 构造赫夫曼树(四步骤):1、n个权值{w1, w2,w3,…..wn}构造n棵二叉树的集合F{T1, T2, T3,…..Tn},其中每棵二叉树Ti中只有一个带权的根节点Wi,其左右子树均未空。2、在F原创 2013-08-26 21:27:05 · 4877 阅读 · 0 评论 -
7.6 二叉树的查找
1. 二叉树的每个节点都不能有多于两个的儿子;2.二叉查找树满足的条件:每个节点的数据要大于左子节点的数据,小于右子节点的数据;原创 2013-08-26 12:11:58 · 939 阅读 · 0 评论 -
3.3.2 单链表内节点的删除
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525原创 2013-08-16 15:34:25 · 1295 阅读 · 0 评论 -
9.2 线性查找(顺序查找)
线性查找法(LinearSearching)又称为循序式查找(SequentialSearching).是从数据中的第一笔数据开始查找比较,如果找到则返回该值或该位置,如果没有找到则往下一步数据查找比较,直到找到最后一笔数据为止。1、未改进LinearSerach情况下12345678910111213原创 2013-08-27 20:26:48 · 1012 阅读 · 0 评论 -
5.1 队列的数组实现
队列数组实现的简单操作:12345678910111213141516171819202122232425262728293031323334353637383940414243444546原创 2013-08-23 16:52:15 · 3418 阅读 · 0 评论 -
面试考题之9.2:链表(C/C++版)
2.1 编写代码,移除未排序链表中的重复结点。进阶:如果不得使用临时缓冲区,该怎么解决?解决方案:方案1: 使用散列表暂略方案2:不借助额外缓冲区1234567891011121314151617181920212223242526272829原创 2015-06-07 16:35:22 · 3478 阅读 · 2 评论