算法与数据结构
文章平均质量分 77
笑看峰云
坚持做一件事,你一定会有收获
展开
-
栈(stack)入门详解之C语言版
栈(Stack):是一种受限的线性表,即限制在表的一端进行插入和删除操作。栈也称为后进先出LIFO (Last In First Out)或先进后出FILO (First In Last Out)线性表。栈顶(top):允许进行插入、删除操作的一端称为栈的栈顶(top),也称为表尾。栈底(bottom):固定不动的一端,称为栈底(bottom),也称为表头。原创 2022-11-12 22:45:36 · 7809 阅读 · 2 评论 -
单链表的增删改查操作详解之C语言版
单链表在应用中经常用到增加新结点、删除结点、修改结点、查找结点等操作,本文针对上述基本操作做了简单汇总,并给出了详细的算法。原创 2022-10-22 21:58:35 · 2931 阅读 · 0 评论 -
创建单链表详解之C语言版
链表是用一组任意的存储单元存储数据元素。如果是存储线性表中的元素,则称为线性链表。链表中的结点地址在内存中可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。因此链表中结点的逻辑顺序和物理顺序不一定相同。如果链表的结点中只有一个指针域,则该链表称为单链表,这也是常用的线性表的存储模式。单链表适合于比较频繁的增加或者删除线性表中元素,不需要移动元素。原创 2022-10-21 23:21:58 · 6583 阅读 · 3 评论 -
霍夫曼(Huffman)编码算法详解之C语言版
霍夫曼(Huffman)树是一类带权路径长度最短的二叉树树。Huffman树的一个非常重要的应用就是进行Huffman编码以得到0-1码流进行快速传输。在电报收发等数据通讯中,常需要将传送的文字转换成由二进制字符0、1组成的字符串来传输。为了使收发的速度提高,就要求电文编码要尽可能地短。此外,要设计长短不等的编码,还必须保证任意字符的编码都不是另一个字符编码的前缀,目的是解决译码的二义性。原创 2022-10-19 10:31:14 · 11392 阅读 · 7 评论 -
霍夫曼(Huffman)树创建算法详解之C语言版
霍夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,在众多领域中有着广泛的应用,尤其是信息编码。Huffman树的主要用处就是对数据进行编码,得到0-1码流,以实现快速传输,此编码也称为Huffman编码。本文主要给出了Huffman树的创建过程及相应的算法实现。原创 2022-10-17 16:18:58 · 2448 阅读 · 0 评论 -
哈希(Hash)查找算法详解之C语言版
哈希查找是一种快速查找算法,该算法不需要对关键字进行比较,而是以关键字为自变量,以该关键字在存储空间中的地址为因变量,建立某种函数关系,称为哈希函数,这样在查找某一关键字的时候,就可以通过哈希函数直接得到其地址,有效的提高了查找效率。选取哈希函数及基本原则主要有:计算函数所需时间、关键字的长度、哈希表长度(哈希地址范围)、关键字分布情况、记录的查找频率等。哈希函数的构造有多种,常见的有“直接定址法”、“数字分析法”、“平方取中法”、“折叠法”、“除留余数法”、“随机数法”等。原创 2022-10-16 12:20:36 · 18078 阅读 · 6 评论 -
平衡二叉树(AVL)平衡化旋转详解
平衡二叉树的全称是平衡二叉排序树,也称为AVL树,这是因为该树结构是由Adelson-Velskii和Landis在1963年提出的。AVL树是BST树的改进结构,使得平均查找长度得到了减少,进而提高了查找的效率。原创 2022-10-09 18:18:21 · 4441 阅读 · 3 评论 -
C语言函数参数传递模式入门详解
函数是C源程序的基本模块,通过对函数模块的调用可以实现特定的功能。在定义函数的时候,函数的参数几乎是必备的选项。要想熟练使用函数的调用,必须清楚函数参数的传递模式。原创 2022-07-14 09:18:04 · 2018 阅读 · 1 评论 -
二叉排序树(BST)删除结点算法详解之C语言版
在二叉排序树上删除某个结点,后的二叉树仍旧是一棵二叉排序树。删除结点主要包含了以下四种情形:1) 删除叶子结点2) 删除只有左子树的结点3) 删除只有右子树的结点4) 删除左右子树均不空的结点**针对第一种情形,直接删除树叶结点即可;针对第二种情形,待删除结点的 左子树 树根替代待删除的结点即可;针对第三种情形,待删除结点的 右子树 树根替代待删除的结点即可;针对第四种情形,需要找到待删除结点的左子树最右侧的结点s,用其代替删除的结点即可。原创 2022-10-05 14:45:20 · 7615 阅读 · 2 评论 -
二叉排序树(BST)查找算法详解之C语言版
在二叉排序树上查找某个结点,其实就是遍历二叉树。由于二叉排序树上的结点是有序的,因此不需要使用普通二叉树的遍历算法,其有自己一套简单的遍历算法,即从树根开始进行遍历,如果待查找元素小于树根元素,则向左遍历,否则向右遍历,如果相等结束遍历。原创 2022-10-04 12:05:09 · 3647 阅读 · 0 评论 -
二叉排序树(BST)创建详解之C语言版
二叉排序树(Binary Sort Tree或 Binary Search Tree)又称二叉查找树,可以用来实现数据的快速查找,也方便数据的插入、删除等工作,因此适用于数据的动态查找。原创 2022-10-03 19:37:59 · 7251 阅读 · 0 评论 -
直接插入排序算法之表插入排序详解
插入排序属于稳定排序法,是一种常用的排序算法。直接插入排序算法可以利用静态数组来实现,也可以使用静态链表或者单链表来实现。本文给出了直接插入算法的静态链表实现方法,即表插入排序算法。基于静态链表实现直接插入排序,就是把待排序的数组放入静态链表中,通过修改静态链表中的索引域的值来给出排序结果。该排序方法不改变原数组中元素的位置,只是在索引域中给出其在排序表中位置,因此相比较于直接插入排序算法,本算法不需要移动元素。原创 2022-09-27 22:36:54 · 3266 阅读 · 1 评论 -
基于单链表实现直接插入排序算法详解
插入排序属于稳定排序法,是一种常用的排序算法。直接插入排序算法可以利用静态数组来实现,也可以使用静态链表或者单链表来实现。本文给出了直接插入算法的单链表实现方法。原创 2022-09-26 21:34:14 · 8648 阅读 · 1 评论 -
基数(桶)排序算法详解之C语言版
基数排序算法又称桶排序,是一种原理简单实现相对麻烦一点的算法。基数排序属于稳定排序法,适用于数值比较大的数据之间的排序。常见的内部排序算法中都使用到了元素之间的比较大小,而基数排序算法不涉及元素之间的比较,而是根据基数将数据存放到相应的“桶”里,经过多趟这样的存放过程,也就是一个渐进排序过程,就可以实现对一组散乱数据进行排序。总趟数是数组中位数最多的那个元素的位数。其实读到这里,大家是不是有一种很熟悉的感觉,没错,这跟创建Hash(散列)表的原理类似。原创 2022-09-25 20:00:24 · 3089 阅读 · 0 评论 -
折半插入排序算法详解之C语言版
折半插入排序是插入排序方法中一种,相比较与直接插入排序算法,减少了排序过程中比较次数,也是一种常用的排序算法。折半插入排序算法基本原理是将折半查找方法与直接插入排序方法相结合,也就是在每一次插入新元素时,利用折半查找方法找到其待插入的位置。原创 2022-09-24 23:14:04 · 9511 阅读 · 1 评论 -
Shell(希尔)排序算法详解之C语言版
Shell排序算法是插入排序算法的一种改进算法,即分组插入排序算法,是不稳定排序算法。其基本原理就是将初始数组按照某一规则分成多个子数组,在每个子数组内进行插入排序,经过多趟这样的分组排序后,即可得到排好序的数组。为了方便实现分组,引入增量d,即将距离为d的元素组成一个新的子数组,这样也是将原数组分割成d个子数组,在组内进行直接插入排序。当完成一趟排序之后,修改d的值,重复上述操作,直到d取值是1的时候结束整个排序过程。原创 2022-09-24 14:35:50 · 2099 阅读 · 2 评论 -
归并排序算法详解(方法二)之C语言版
归并排序是一种常用的排序算法,属于稳定排序法。归并排序就是将两个已经分别排好序的数组A和B合并为一个排好序的数组C。如果数组散乱的数组,则需要将数组元素分别按照长度为d=2^n,n=0,1,2,3,…,进行分组,然后对相邻的两组进行归并排序。原创 2022-09-23 21:00:55 · 1190 阅读 · 1 评论 -
归并排序算法详解(方法一)之C语言版
归并排序是一种常用的排序算法,属于稳定排序法。归并排序就是将两个已经分别排好序的数组A和B合并为一个排好序的数组C。如果数组散乱的,则将数组元素分别按照长度为d=2^n,n=0,1,2,3,...,进行分组,然后对相邻的两组进行归并排序。具体过程是首先取长度d=1,即将数组的每个元素作为一个子数组,然后把相邻的两个子数组作为一对进行归并排序,直到整个数组排序完成。之后依次取长度d=2,4,8,...,即把相邻的两个(4,8,...)元素作为一个子数组,再对两个相邻的子数组进行归并排序,直到整个数组排序完成。原创 2022-09-23 13:42:26 · 2830 阅读 · 1 评论 -
冒泡排序算法详解之C语言版
冒泡排序是一种常用的排序算法,属于稳定排序法,其时间复杂度为O(n^2)。冒泡排序法的原理就是从前向后依次比较相邻两个元素的大小,大元素后沉,类似于水中的泡泡逐步上浮的过程,随着泡泡逐渐接近水面,水中压强逐渐减小,水泡体积逐渐增大,因此成为冒泡排序。原创 2022-09-19 20:37:09 · 47662 阅读 · 6 评论 -
选择排序算法详解之C语言版
选择排序算法原理就是首先固定一个位置i,用该位置上的元素data与后面的元素data_j依次比较大小。以从小到大排序为例,如果data > data_j,则交换这两个数据,直到位置i之后的所有元素都小于该位置上的元素结束。之后执行i++即可完成该数组的排序。原创 2022-09-18 22:38:20 · 7868 阅读 · 4 评论 -
直接插入排序算法详解之C语言版
插入排序属于稳定排序法,是一种常用的排序算法。其基本原理就是把一个数据插入到一组已经排好序的数列中,得到仍是有序的数列。原创 2022-09-17 22:33:29 · 2430 阅读 · 1 评论