
数据结构与算法
shengdaVolleyball
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
32、数据结构与算法 - 排序 (四)总结
排序冒泡排序 初级冒泡排序: 冒泡排序: 冒泡排序(优化): 选择排序: 直接插入排序: 希尔排序: 堆排序: 归并排序 归并排序(递归): 归并排序(非递归): 快速排序: 快速排序: 快速排序(优化): Program ended with exit code: 0#include <stdio.h>#include <string.h>#include <ctype.h>#include <.原创 2020-06-09 23:12:57 · 176 阅读 · 0 评论 -
31、数据结构与算法 - 排序 (三)快速排序
快速排序设计一个函数(QSort)QSort 函数思路:判断low 是否小于high;求得枢轴,并且将数组枢轴左边的关键字都比它小,右边的关键字都比枢轴对应的关键字大;将数组一份为二,对低子表进行排序,对高子表进行排序设计一个函数(Partition)Partition 函数的功能选取当中一个关键字作为枢轴;将它放在一个合适的位置上,使得它的左边的值都比它小,右边的值都比它大优化...原创 2020-06-09 22:56:48 · 389 阅读 · 0 评论 -
30、数据结构与算法 - 排序(二)归并排序
归并排序(Merging Sort)是利用归并的思想实现排序方法,他的原理是假设初始序列含有n个记录,则可以看成n个有序的子序列,每个子序列的长度为1,然后两两合并,得到[n/2]个长度为2或1的有序子序列,再两两归并。 ……如此重复,知道得到一个长度为n的有序序列为止,这种排序方法称为2路归并排序如上图,归并排序就是将序列,拆分成不大于2的序列,进行排序,然后再依次两两合并再排序,直到合并完成归并递归 与 非递归.原创 2020-06-09 20:40:20 · 371 阅读 · 0 评论 -
29、数据结构与算法 - 排序(一)冒泡、简单选择、直接插入、希尔排序、堆排序
排序确定一种排序规则,使用相应的关键字满足排序规则,例如递增、递减。使得到序列成为一个按关键字有序的序列,这样得出操作成为排序排序的分类内排序:是在排序整个过程中,待排序的所有记录全部被放置在内存中 外排序:由于排序的记录个数太多,不能同时放置在内存,整个排序过程需要再内外存之间多次贾环数据才能进行 1、冒泡排序(Bubble sort)冒泡排序是一种交换排序,他的基本思想就是:凉凉比较相邻的记录的关键字,如果反序则交换,知道没有反序的记录为止2、简单排...原创 2020-06-07 23:21:00 · 739 阅读 · 0 评论 -
28、数据结构与算法 - 散列查询
散列技术散列技术是记录的存储位置和他的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,根据这个对应关系找到给定位置key的映射f(key)。若炒作集合中存在这个记录,则必定在f(key)的位置上1、2、直接地址法f(key) = a*key + b(a,b为常数);3、4、5、6、7、8、9、连地址法:将所有的关键字为同义词的记录存储在一个单链表..原创 2020-06-07 21:55:05 · 314 阅读 · 0 评论 -
27、数据结构与算法 - 平衡二叉树(AVL树)
平衡二叉树高度平衡:意思是说,要么它是一颗空树,要么它的左子树和右子树都是平衡二叉树。且左子树和右子树的深度之差绝对值不超过1;我们讲二叉树上结点的左子树减去右子树深度的值称为平衡因子BF(balance Factor)最小不平衡子数平衡二叉树构建的基本思想:就是在构建二叉树排序树的过程中,每当插入一个结点时,先检查是够因插入而破坏了树的平衡性。若是,则找到最小不平衡子树。在保持二叉排序树特性的前提下,调整最小不平衡子树中各结点之间的连接关系。进行相关的旋转,使之成为..原创 2020-06-07 21:09:48 · 480 阅读 · 0 评论 -
26、数据结构与算法 - 二叉排序树(二叉搜索树)
二叉排序树(Binary Sort Tree)定义二叉排序树,又称为二叉查找树,它或者是一颗空树,或者是一颗具有下列性质的的二叉树若他的左子树不为空,则左子树上所有的结点的值均小于它的根结点的值; 若他的右子树不为空,则右子树上所有的结点的值均小于它的根结点的值; 他的左右子树也分别是二叉排序树如下,插入的话每次都要移动好多,非常麻烦。#include "stdio.h"#include "stdlib.h"#include "math.h"#incl..原创 2020-06-07 19:53:14 · 426 阅读 · 0 评论 -
25、数据结构与算法 - 顺序查找
查找静态查找表(Static SearchTable):只作查找操作的查找表查询某个“特定的”数据元素是否在查找表中 检索某个“特定的”数据元素和各种属性动态查找表(Dynamic SearchTable):在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素;显然动态查找表的操作就是2个动作查找时插入数据元素 查找时删除数据元素顺序表查找(Sequential Search)顺序查找,又称为线性查找,是最基本的查找技术。..原创 2020-06-07 18:02:36 · 574 阅读 · 0 评论 -
24、数据结构预算法 - 图 关键路径
关键路径什么是关键路径?路径上各个活动所持续的时间之和成为路径长度 从源点到汇点具有最大的路径叫关键路径 在关键路径上的活动叫关键活动各个工作画图如下要在规定的时间内完成工作的话就需要算出关键路径总耗时如上图所示,造发动机耗时为3,造外壳和造发动机可以同时进行,所以,关键路径是造发动机。然后不见集中到位,组装代码实现#include "stdio.h"#include "stdlib.h"#include "math...原创 2020-06-07 17:06:52 · 270 阅读 · 0 评论 -
23、数据结构与算法 - 图 拓扑排序
拓扑排序拓扑排序 - 简介设G= (V, E) 是一个具有n个顶点的有向图,V中的顶点序列V1, V2,…Vn.满足从顶点Vi到顶点Vj有一条路径,则在定点序列Vi必须在Vj之前,则我们成这样的顶点需列成为拓扑序列所谓拓扑排序,其实就是对一个有向图构造序列的过程构造过程拓扑序列会产生2个结果如果此图中的全部顶点被输出,则说明它不存在环(回路)的 AOV网 如果输出的顶点数少,哪怕仅少了一个,也说明这个网存在环(回路),不是AOV网AOV网存储用邻接表算法分析:算法..原创 2020-06-07 16:22:01 · 520 阅读 · 0 评论 -
22、数据结构预算法 - 图 最短路径 弗洛伊德(Floyd)算法
最短路径弗洛伊德(Floyd)算法弗洛伊德思想,在原有的邻接矩阵上,将任意两点之间的最短距离都给算出来如下图:原来存的V1->V5 是V1 到V5直接相连的,现在V1 ->V0 ->V5 = 3<5,所以更新。算法的公式现在一下图进行分析原来的邻接矩阵存储需要经过3次遍历比较经过全部遍历比较之后得到最终的结果代码实现#include <stdio.h>...原创 2020-06-07 10:58:06 · 398 阅读 · 0 评论 -
21、数据结构与算法 - 图 最短路径(一)Dijkstra算法
图 最短路径图的最短路径是求图上两个点相连的话最短的路径不需要连接所有点如下图,要从源点 v0 到 终点 v8图的邻接矩阵存储最终应求得的结果Dijkstra算法思路分析:初始化3个数组,final数组: 用来标记顶点是否已经求得最短路径,求得标记为1,没有标记为0.求得过的,不再重复计算 D数组: 用来比较V0 到某个顶点的路径(例如V0->V3 = V0->V1+V1->V3,当然也会有多条路径的情况,进行比较如果比当前数...原创 2020-06-07 09:37:19 · 1277 阅读 · 0 评论 -
20、数据结构预算法 - 图 最小生成树(二)kruskal 算法
克鲁斯卡尔【kruskal】算法思路:1、将邻接矩阵转化成边表数组2、对边表数组根据权值按照从小到大的顺序排序3、遍历所有的边,通过parent 数组找到边的连接信息;避免闭环问题;4、如果不存在闭环问题,则加入到最小生成树中,并且修改parent 数组。先排序,然后按边表顺序去parent 数组查找parent 数组查找存放的是顶点最终的连接关系(直接连接或者是间接连接)如下图:第一次执行,begin = 4, end = 7,weight = 7(begin边的小.原创 2020-06-03 15:12:18 · 224 阅读 · 0 评论 -
19、数据结构与算法 - 图 最小生成树(一)Prim算法
最小生成树什么是最小生成树,就是一个图中,将所有顶点连结并且其权重总和最小。当然前提是图是一个连通图1. Prim算法1.1核心思路从一个顶点出发,不断贪婪已知可以连接的最小权值边。一个adjvex数组不断更新相连,且权值更小的顶点。 adjvex中是起点,adjuer[k] -> k 一个lowcost数组不断更新可选的最小权值,通过0标记已加入最小生成树。 lowcost 中存储 adjuex[k] --> k 的权值,新顶点指向k的权值..原创 2020-06-01 23:20:14 · 493 阅读 · 0 评论 -
18、数据结构预算法 - 图(三)广度优先遍历
图的遍历广度优先遍历下图将图1 变换成图2,分层的形式,便于查看特点1、把根结点放在队列的末尾2、每次从队列的头部取出一个元素,查看这个元素所有的下一级元素,把他们放到队列的末尾。并把这个元素几位她下一级元素的前驱。3、找到所有找的元素时结束程序4、如果遍历整个树还没有找到,结束程序一、邻接矩阵 广度优先遍历#include <stdio.h>#include "stdio.h"#include "stdlib.h"#include "math...原创 2020-05-26 22:05:00 · 293 阅读 · 0 评论 -
17、数据结构与算法 - 图(二)深度优先遍历
图的遍历一个顶点只能访问一次,就需要用一个标记来标识当前顶点是否访问过有两种遍历形式深度优先遍历 广度优先比那里深度优先遍历将图画成如下图的形式。右手原则,先走右边先走A B C D E F(由于A被标记过了,所以到G) G H这样走完之后会发现 I 并没有走,那么就再回退一次,找到没有标识的顶点1.1 邻接矩阵深度优先遍历思路1、将图的定点和边信息输入到图结构中2、创建一个visited 数组,用来表示定点是否已经被遍历过3、初始化visi.原创 2020-05-26 21:18:05 · 331 阅读 · 0 评论 -
16、数据结构与算法 - 图(一)存储
图线性表特性; 明显层次关系, 1对多关系 图的结构, 结点之间关系任意. 二叉树有空树(只有根结点),但是图没有空图的概念。图的结点可以形成闭环也可以不形成闭环,同样也可以不连接带方向的叫有向图,没有方向的叫无向图二、图的存储连接线:无向图叫边,有向图叫弧自己用0,没有关系就用无穷大表示(代码中用最大值表示),有关系有权重就用权重,没有权重就用1.没有多少个顶点就多大的数组1、邻接矩阵(顺序存储)...原创 2020-05-23 14:19:13 · 396 阅读 · 0 评论 -
15、数据结构预算法 - 哈夫曼编码
哈夫曼编码1、哈夫曼编码思想首先我们需要一份权重统计,例如学生成绩分布规律根据统计表构成树,求得其路径长度为20优化一下,如下图,路径长度就变成了16计算一下树的WPL 路径长度*权重 的总和优化哈夫曼编码思想假如说字母的权重如下A 5E 10B 15D 30C 40那么先将两个最小的值构成树,这时候N1 就是15。再与相应大小值的B 构成树,N2是30 。再与D 够成树。以此类推,左子树小于右子树(规定)。...原创 2020-05-23 09:49:17 · 390 阅读 · 0 评论 -
14、数据结构与算法 - 二叉树(四)线索化二叉树
线索化二叉树一个二叉树,如果有n个结点,那么就有n-1个有效路径。如果是非常庞大的二叉树,就会有许多的空间浪费。如下图。有10个结点数据,有11个空指针域。如上图,如果我们想知道F 结点的前驱,或者是某个 结点的前驱是谁的时候,这个时候我们就需要变量很多个结点找到其对应关系,才能找到我们想要的对应结点的前驱。这个时候我们就可以利用这些空的指针域,去做一些有用的事情。这就是线索化二叉树产生的背景。不是所有结点都能进行线索化,能线索化的结点必须左子树或右子树至少有一个为空。规则:...原创 2020-05-22 22:47:29 · 381 阅读 · 1 评论 -
13、数据结构与算法 - 二叉树(三)链式存储二叉树
链式存储二叉树#include <stdio.h>#include "string.h"#include "stdlib.h"#include "math.h"#include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0/* 存储空间初始分配量 */#define MAXSIZE 100/* Status是函数的类型,其值是函数结果状态代码,如OK等 */typede.原创 2020-05-21 22:42:23 · 396 阅读 · 0 评论 -
12、数据结构与算法 - 二叉树(二)顺序存储二叉树
顺序存储二叉树#include <stdio.h>#include "string.h"#include "stdlib.h"#include "math.h"#include "time.h"#define OK 1#define ERROR 0#define TURE 1#define FALSE 0#define MAXSIZE 100 //初始化分配空间#define MAX_TREE_SIZE 100typedef int Status;/..原创 2020-05-21 22:03:01 · 737 阅读 · 0 评论 -
11、数据结构与算法 - 二叉树 (一)基本概念
二叉树1、二叉树的一些概念(1)、度结点拥有的子树数目成为结点的度(2)、层从跟开始定义,根为第1层,根的子结点为第2层,以此类推。(3)、高度树中结点的最大层次。根结点为最高。从下往上数(4)、深度同高度,从上往下2、树的5种形态(1)、满二叉树双亲结点都有2个子结点(2)、完全二叉树从根结点开始,最深一层以上的都是满二叉树。最后一层的叶子结点从左至右是连续的,不存在中间有空结点的情况3、二叉树的性质1、在二叉树...原创 2020-05-19 23:05:43 · 304 阅读 · 0 评论 -
10、数据结果与算法 - 字符串匹配问题 KMP算法
KMP算法前面 BF算法 中有许多重复比较例如在第6个位置比较失败,由于前面的字符都不相同,所以将模式串的第一个位置 和主串的第6个位置开始比较就行。像BF算法中一位一位的向后移动比较,那些都是多余的。KMP算法 就是尽量减少这些没有意义的重复比较。KMP算法 就是为了解决这些过多的重复比较产生的。KMP的核心思想是通过一个next 数组,记录模式串中各元素位置与主串的中的元素不匹配时...原创 2020-04-23 21:03:22 · 394 阅读 · 0 评论 -
9、数据结构与算法 - 字符匹配问题的 BF算法 和 RK算法
字符匹配问题有个一主串 S = {a,b,c,a,c,a,b,d,c},模式串T={a,b,d};请找到模式串在主串中第一次出现的位置;提示:不需要考虑字符串大小写问题,字符均为小写字母;分析:#include <stdio.h>#include "string.h"#include "stdlib.h"#include "math.h"#include ...原创 2020-04-22 15:52:00 · 606 阅读 · 0 评论 -
8、数据结构与算法 - 栈相关联系题解析
栈练习题准备#include <stdio.h>#include "string.h"#include "ctype.h"#include "stdlib.h"#include "math.h"#include "time.h"#define ERROR 0#define TRUE 1#define FALSE 0#define OK 1#defin...原创 2020-04-21 22:42:17 · 680 阅读 · 0 评论 -
7、数据结构与算法 - 队列
大纲队列假溢出问题 循环队列的空间/满判断推理 队列的顺序存储设计/链式存储设计一、队列假溢出问题队列队列同 栈 一样也是一种线性表,它是在表的一端插入数据,在另一端取出元素。插入元素的这个一端称之为队尾,取出元素的一端称之为队头。队列的特性:只能从队尾插入,从队头取出(入队,出队) FIFO,先进先出。假溢出如上图C 假设队列的长度为...原创 2020-04-14 22:26:44 · 315 阅读 · 0 评论 -
6、数据结构与算法 - 栈结构
大纲限定性数据结构 - 栈与队列的特点 顺序栈实现(栈结构的顺序存储方式实现) 链式实现(栈结构的链式存储方式实现) 栈与递归 采用递归算法解决问题条件栈一、栈的特点:先进后出出栈和进站都是从栈顶进行操作。也就是说只能读到栈顶,不能像线性表可以读取任何位置上的元素。队列先进先出,只能充队尾插入,从队列头出队列栈的top 信息栈需要...原创 2020-04-12 15:11:19 · 385 阅读 · 0 评论 -
5、数据结构与算法 - 线性表练习题及解析
练习题及解题思路#include <stdio.h>#include "string.h"#include "ctype.h"#include "stdlib.h"#include "math.h"#include "time.h" #define ERROR 0#define TRUE 1#define FALSE 0#define OK 1 ...原创 2020-04-12 14:42:19 · 641 阅读 · 0 评论 -
4、数据结构与算法 - 双向链表和双向循环链表
大纲双向链表(增删改查)双向循环链表(增删)一、双向链表双向链表的结点有连个指针域,一个(prior)指向钱一个结点,一个(next)指向后一个结点。#include <stdio.h>#include "string.h"#include "ctype.h"#include "stdlib.h"#include "math.h"#...原创 2020-04-12 14:16:31 · 507 阅读 · 0 评论 -
3、数据结构与算法 - 单向循环链表
大纲:单向循环链表创建 循环遍历 插入 删除 查找循环链表一、单向循环链表循环链表中没有首结点,都是首元结点#include <stdio.h>#include "string.h"#include "ctype.h"#include "stdlib.h"#include "math.h"#include "time.h"...原创 2020-04-03 11:16:09 · 383 阅读 · 0 评论 -
2、数据结构与算法 - 线性表
大纲:1、线性表-关于顺序存储的实现(增删改查)2、线性表-关于链式(单链表)存储的设计(增删改查与头插法/尾插法)线性表1、顺序表对于非空的线性表和线性结构,其特点如下:存在唯一的一个被称作“第一个”的数据元素;存在唯一的一个被称作“最后一个”的数据元素;除了第一个之外,结构中的每个数据元素均有一个前驱除了最后一个之外,结构中的每个数据元素都有一个后续。...原创 2020-04-02 18:30:16 · 742 阅读 · 0 评论 -
1、数据结构与算法 - 数据结构基础
数据结构与算法[基础]大纲:数据结构核心名词解释逻辑结构与物理结构区别算法合计要求算法效率衡量方法算法时间复杂度算法空间复杂度计算一、数据结构核心名词解释1、数据结构基本术语数据 程序的操作对象,用于描述客观事物。 特点:1、具有可输入到计算机 2、可以被计算机处理数据对象 性质相同给的数据元素的集合(类似于数组)...原创 2020-04-01 16:02:36 · 370 阅读 · 0 评论