- 博客(17)
- 收藏
- 关注
原创 快速排序——C语言
快速排序是对冒泡排序的一种改进。其基本思想是:通过一趟排序将待排记录分割成两部分,其中一部分记录的关键字均比另一记录的关键字小,则可对这两部分记录继续进行排序,以达到整个序列有序。代码实现:int partition1(int data[],int low,int high){ int pivokey,t; pivokey=data[low];///用子表的第一个记录...
2018-10-07 21:19:05 441
原创 折半查找——C语言
折半查找是一个比较常用的查找方法。相较于最原始的这个查找过程为:先确定待查找记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。具体是设立三个指针low,hight,mid,分别指向待查找的数组下界,上界,中间值。通过一次次比较需查找数和中间值的大小,来缩小待查找范围。代码实现:/**折半查找**/int search_bin(stable ST,int key)...
2018-10-07 21:14:35 439
原创 栈——C语言
栈是限定仅在表尾进行插入或删除操作的线性表。栈为先进后出特点的线性表。栈的储存结构可以类似于一个顺序表。栈的基本操作有入栈、出栈、判断栈空、取栈顶。入栈:将栈顶指针向上移动,将入栈元素传入栈内。出栈:将栈顶指针向下移动,实现出栈。通过栈顶指针是否为-1来判断栈是否为空。取栈顶:通过返回栈顶指针指向的元素来实现。代码实现:typedef struct seqstact...
2018-10-07 21:11:01 238
原创 图——C语言
图是一种较线性表和数更为复杂的数据结构。在图形结构中,结点的关系可以是任意的,图中任意两个数据元素之间都可能相关。图的存储结构有数组表示法、邻接表法、十字链表法、邻接多重表。数组表示法一般是使用两个数组分别储存数据元素的信息和数据元素之间的关系信息。一般使用一位数组来储存顶点信息,使用二维数组来储存顶点的关系(边或弧)。如图所示,横纵坐标为顶点个数邻接表是图的一种链式存储结构。每...
2018-10-07 19:35:14 11109
原创 树——C语言
树是n个结点的有限集。树的节点包括一个数据元素及若干指向其子树的分支-如图而一般我们使用二叉树。二叉树是另一种树型结构,它的特点是每个节点至多只有两棵子树(也就是说,二叉树不存在度大于2的节点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。如图二叉树根据使用的需要,其储存结构也不相同。但大体来说,二叉数的储存结构由一个数据元素和分别指向其左右的两个分支构成。在特定需要的情况下,还会在...
2018-10-07 11:00:40 2676
原创 串——C语言
串(也可称为字符串),是由0个或多个字符组成的有限序列。可以用于文本编辑。串中任意个连续的字符组成的子序列称为该串的子串。包含子串的串相应的称为主串。与线性表的存储结构相类似,串既可以用链式结构存储,也可以用数组形式存储。串的基本操作与线性表类似,原理大致相同。而串进行模式匹配时可以用到KMP算法。代码实现:(这里选用数组存储形式的串)#include<stdio.h>...
2018-09-30 21:57:49 478
原创 循环队列——C语言
队列的特点是先进先出。在队列的存储过程中,不仅使用了一组地址连续的存储单元存放从队列头到队列尾的元素,而且还附设了两个指针front和rear,分别指示队列头元素及队列尾元素的位置。 队列操作示意图(出自严蔚敏版数据结构)对链表的增加是通过移动rear指针,链表的删除时通...
2018-09-30 21:08:59 344
原创 顺序表——C语言
顺序表的结构就是数组结构,基本操作比较简单。 结构如图 顺序表的增加,删除,查询,也是对不同下标的元素进行操作。顺序表的增加:若顺序表在i位置增加,则将i以后的所以数组元素向后移动,将原来i位置的数值用增加数值代替。...
2018-09-30 20:33:43 1592
原创 拓扑排序——C语言
拓扑排序就是由某个集合上的一个偏序得到该集合上的一个全序。某个集合的偏序就是指集合中仅有部分成员之间可比较,而全序是集合中全部成员都可以进行比较。可以进行拓扑排序的需要是一个有向无环图。对一个图进行拓扑排序,就要进行以下几个步骤:(1)在有向图中选一个没有前驱的顶点并输入之;(2)从图中删除该顶点和所有以它为尾的弧;重复这两个步骤,直到所有顶点均以输出(拓扑排序成功),或者当前...
2018-09-23 19:54:48 2221 2
原创 直接插入排序——C语言
插入排序是最简单的一种排序方法。它的基本操作就是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。直接插入排序时,我们将第二个数组元素作为插入数,第一个数作为有序数组。逐个比较两者大小,最后将数插入到合适位置。代码实现:/**插入排序**/void inse(int *data){ int t=0,j=0; for(int i=1;i<...
2018-09-23 18:56:27 252
原创 桶排序——C语言
桶排序是一种常见的排序方式。其主要是先确定一定大小的桶,再将数组数值存入桶的对应下标中,最后对非空桶进行排查,将桶的数值赋给数值。代码实现:/**桶排序**/void bucket(int *data)///随机产生data数组的值{ int t; int j=0; t=findmax(data)+1;///使t为数组最大数值 int buketdata...
2018-09-23 18:40:29 1115
原创 最小生成树——普里姆算法
当我们要求解n个连接城市之间的路线问题,就需要我们进行一个计算。而在连通网上面,我们称这类问题为最小代价生成树(最小生成树)问题。今天我们主要讨论的是用普里姆算法实现最小生成树。如图所示,a图是一个有权值的连通图。要对其进行最小生成树求解,假设初始点为V1,寻找与1有关系而且权值最小的顶点 ...
2018-09-16 21:50:58 673
原创 最短路径——迪杰拉斯算法
迪杰拉斯算法是求图的最短路径的一个常用算法。 如图所示为一个 有权有向图 假设起始点为V0,从起始点开始先去找与起始点距离最近的一个点—V2。再去找寻距离V2最近的点V3,若此时到达V3还有其他路径...
2018-09-16 10:08:42 2619
原创 图的深度优先搜索(DFS)——C语言版
DFS是图遍历的另一种方式,类似于树的先根遍历。DFS过程大概思想为:假设从顶点1开始访问,寻找与1有关系的点,2,3,4,按照程序规定的顺序, 先访问2,再寻找与2有关的顶点6......以此类推,访问完全部顶点。DFS分为递归与非递归两种方式。代码如下:/**递归方式深度搜寻**/void ArrayGraph_DFS_1(ArrayGraph *G,int n,int a,bo...
2018-09-09 15:28:50 16374 1
原创 图的广度优先搜索(BFS)——C语言版
图的广度搜索类似于树的按层次遍历,用的是队列来解决。BFS的大概过程为:假设从顶点1出发进行BFS,首先访问到与1有关系的两个顶点2、3 、4 再通过寻找与2,3,4两点有关的顶点......以此类推。可以把BFS的过程比作队列先进先出,从顶点1开始时,先对1入队列,找到与1有关系的点后,将两顶点入队列,再将1出队列,进而对每一个顶点进行访问。输出结果为:1、2、3、4、6、5代码如下...
2018-09-09 14:55:52 5307
原创 KMP算法
最近通过网上的资料学习了KMP算法~KMP算法是用于匹配两个字符串的一种算法,相较于最初始的逐个匹配的办法其优势就在于,KMP算法匹配字符串出现字符比较不相等时,尽可能的利用已经得到的“部分匹配”的结果,对子串“滑动”尽肯能多的距离。 KMP算法是在已求得子串(模式串)的next数组的基础上进行匹配的。因此next数组的求解对于KMP算法来说是至关重要的。例如...
2018-09-09 10:48:18 413
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人