数据结构和算法
文章平均质量分 65
mumingv
这个作者很懒,什么都没留下…
展开
-
【数据结构与算法】【查找】哈希表的代码实现
散列表原创 2014-10-28 17:47:50 · 5266 阅读 · 0 评论 -
【数据结构与算法】【查找】插值查找的代码实现
插值查找(Interpolation Search):是根据要查找的关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心在于插值的计算公式。插值计算公式:(key - a[low]) / (a[high] - a[low])mid计算公式:mid = low + (high - low) * (key - a[low]) / (a[high] - a[low]);原创 2014-11-04 20:04:44 · 798 阅读 · 0 评论 -
【数据结构与算法】【查找】顺序查找(线性查找)的代码实现
顺序查找:也称为线性查找,是最基本的查找技术。查找过程是:从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值进行比较,若某个记录的关键字和给定值相等,则查找成功;如果直到最后一个(或第一个)记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找失败。代码实现(基本算法和优化算法):// Filename: sequential_search.c#i原创 2014-11-04 18:50:56 · 4217 阅读 · 0 评论 -
【数据结构与算法】【查找】基本概念
查找表(Search Table):是由同一类型的数据元素(或记录)构成的集合。查找表分为静态查找表和动态查找表。关键字(Key):是数据元素中某个数据项的值,又称为键值,用它可以标识一个数据元素。若关键字可以唯一地标识一个记录,则称此关键字为主关键字(Primary Key);若关键字对应多个记录,则称此关键字为次关键字(Secondary Key)。关键码:主关键字对应的数据项称为原创 2014-11-04 17:42:55 · 774 阅读 · 0 评论 -
【数据结构与算法】【查找】折半查找(二分查找)的代码实现
折半查找(Binary Search):也称为二分查找。它的前提是:1、线性表中的记录必须是关键字有序(通常是从小到大有序);2、线性表必须采用顺序存储。折半查找的基本思想是:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断反复,直到查找成原创 2014-11-04 19:38:09 · 10261 阅读 · 0 评论 -
【数据结构与算法】【查找】斐波那契查找的代码实现
斐波那契查找(Fibonacci Search):基于折半查找,对于mid的选择,使用斐波那契数组进行了调整。mid计算公式:mid = low + F[k - 1] - 1斐波那契数组计算公式: F[K] = F[k - 1] + F[K - 2] F[k] - 1 = (F[k - 1] - 1) + 1 + (F[k - 2] - 1)原创 2014-11-04 23:15:57 · 1321 阅读 · 0 评论 -
【数据结构与算法】【排序】堆排序的代码实现
堆排序是一种选择排序。前提:数组元素a[0]用作哨兵或临时变量,a[1]~a[n]存放n个待排序的元素。基本思想是:将待排序的序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根结点。将它移到序列尾部,而后将剩余的n-1个序列重新构造成一个大顶堆。如此反复执行,便能得到一个有序序列了。代码实现:// Filename: heap_sort.c#include原创 2014-11-02 11:45:03 · 499 阅读 · 0 评论 -
【数据结构与算法】【排序】快速排序的代码实现
快速排序是一种交换排序,它是排序算法的王者。前提:数组元素a[0]用作哨兵或临时变量,a[1]~a[n]存放n个待排序的元素。基本思想是:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。快速排序优化方法:1、优化选取枢轴;2、优化不必要的交换;3、优化小数原创 2014-11-03 15:16:34 · 1615 阅读 · 0 评论 -
【数据结构与算法】【排序】归并排序的代码实现
归并是指将两个或两个以上的有序表组合成一个新的有序表。前提:数组元素a[0]用作哨兵或临时变量,a[1]~a[n]存放n个待排序的元素。基本思想是:假设初始序列有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2](向上取整)个长度为2或1的有序子序列;再两两归并,...,如此重复,直至得到一个长度为n的有序序列为止。这种排序方法称为2路归并排序。原创 2014-11-03 10:21:10 · 811 阅读 · 0 评论 -
【数据结构与算法】【排序】冒泡排序的代码实现
冒泡排序是一种交换排序。基本思想是:两两相邻记录的关键字,如果反序则交换,直到没有反序的记录了为止。冒泡排序的要点:1、两两注意是相邻的两个元素的意思;2、如果有n个元素,则需要比较n-1次,每一轮减少1次比较;3、既然叫冒泡排序,那就是从下往上两两比较,所以看上去就跟泡泡往上冒一样。代码实现:原创 2014-10-31 15:02:35 · 781 阅读 · 0 评论 -
【数据结构与算法】【排序】直接插入排序的代码实现
简单选择排序是一种插入排序。前提:数组元素a[0]用作哨兵或临时变量,a[1]~a[n]存放n个待排序的元素。基本思想是:从a[2]开始,将元素插入到前面已经排好序的有序表中,从而得到一个新的、记录数增加1的有序表。代码实现:// Filename: insert_sort.c#include #include #include #include "pub原创 2014-10-31 20:11:10 · 835 阅读 · 0 评论 -
【数据结构与算法】【排序】希尔排序的代码实现
希尔排序是一种插入排序。前提:数组元素a[0]用作哨兵或临时变量,a[1]~a[n]存放n个待排序的元素。基本思想是:将待排序元素进行跳跃分割,对分割后的子序列分别进行简单插入排序;而后将跳跃分割的增量进行缩小,最后增量为1时完成排序。代码实现:// Filename: shell_sort.c#include #include #include #inc原创 2014-11-01 18:20:22 · 840 阅读 · 0 评论 -
【数据结构与算法】【排序】简单选择排序的代码实现
简单选择排序是一种选择排序。前提:数组a[0]用作哨兵或临时变量,a[1]~a[n]存放n个待排序的元素。基本思想是:对于第i个元素,通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1代码实现:// Filename: select_sort.c#include #include #include #include "pu原创 2014-10-31 18:24:09 · 882 阅读 · 0 评论 -
【数据结构与算法】【排序】基本概念
排序:将线性表中的元素按照升序或者降序进行有序排列的操作。排序方法的稳定性:关键字相同的两个元素(记录),排序后的顺序如果和排序前的相同,则称该排序方法是稳定的,否则则称该排序方法是不稳定的。内排序:在排序过程中,待排序的所有元素(记录)全部都放置在内存中。外排序:在待排序的元素(记录)太多的情况下,不能同时将所有元素放置在内存中,在排序过程中需要在内外存之间进行多次数原创 2014-10-31 09:47:55 · 353 阅读 · 0 评论 -
【数据结构和算法】【栈】顺序栈的代码实现
顺序栈的存储方式如下图所示:原创 2014-10-27 17:18:14 · 1087 阅读 · 0 评论 -
【数据结构和算法】【二叉树】二叉树遍历的代码实现
二叉树的顺序存储结构:使用数组表示,将二叉树填充为完全二叉树并依次自上而下、自左至右进行编号[1-n],而后将编号为[1-n]的结点元素一一对应地存储在数组下标为[0-(n-1)]的数组元素中。二叉树的链式存储结构:1、二叉链表:结点中有两个链域(指针),分别指向左儿子、右儿子;2、三叉链表:结点中有三个链域(指针),分别指向左儿子、右儿子、双亲;3、线索链表:二叉链表原创 2014-10-27 17:31:21 · 5086 阅读 · 1 评论 -
【数据结构与算法】【排序】总结
如下排序算法当中,前三种是简单算法,后四种是改进算法。各算法的指标对比如下:原创 2014-11-03 16:11:40 · 385 阅读 · 0 评论