
数据结构与算法
文章平均质量分 77
以理论结合代码解析,通过实际例题巩固
Jesslili
java小小白
展开
-
并查集 --- Java通用模版
并查集常用于处理大规模数据下的元素分组问题,特别是在数据量极大时,使用正常的数据结构可能会导致空间或时间复杂度过高。并查集通过其高效的数据处理能力,能够在有限的时间内完成元素的合并和查询操作,特别适用于竞赛编程和实际工程应用中。leetcode题目: 冗余连接 冗余连接 II 省份数量 最长连续序列 统计无向图中无法互相达到的点数并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。原创 2024-10-21 21:36:38 · 400 阅读 · 0 评论 -
常用数据结构与算法总结(含例题和完整代码)
一、位运算● ^ 可理解为不进位相加● a^a=0● a^0=a题目一一组数中,只有一个数出现的次数是奇数,其他数字出现的次数都为偶数,找出这个出现次数为奇数的数。public static void printOddTimesNum1(int[] arr) { int eor = 0; for (int i : arr) { eor ^= i; } System.out.println(eor);}题目二一组数中,只有两个数出现的次数是奇原创 2022-04-23 10:28:36 · 6662 阅读 · 4 评论 -
C语言数据结构与算法---快速排序
快速排序—改进的交换排序基本思想:任取一个元素(如:第一个)为中心所有比它小的元素一律前放,比它大的一律后放,形成左右两个子表对各子表重新选择中心元素并依此规则调整直到每个子表的元素只剩一个该方法太浪费空间,需要许多空间改进如下:只需要一个额外的位置依此将后续的值与所选界点进行比较比界点大的不移动(low++或high–),比界点小的移动到前面前面有空,从后面移动一个比...原创 2020-03-09 15:36:10 · 532 阅读 · 0 评论 -
C语言数据结构与算法---基数排序
基数排序思想:分配 + 收集基数排序也叫桶排序或箱排序:设置若干个箱子,将关键字为 k 的记录放入第 k 个箱子中,然后在按序号将非空的连接基数排序:数字是有范围的,均由 0-9 这十个数字组成,则只需要设置十个箱子,相继按照个、十、百…进行排序图示:第一趟,按个位排第一趟收集第二趟,按十位排第二趟收集第三趟,按百位排第三趟收集,排序结束...原创 2020-03-09 14:44:20 · 802 阅读 · 0 评论 -
C语言数据结构与算法---归并排序
归并排序1.基础理解基本思想:将两个或两个以上的有序子序列“归并”为一个有序序列。在内部排序中,通常采用的是 2-路归并排序 --------即将两个位置相邻的有序子序列 R[l…m] 和 R[m+1…n] 贵宾房为一个有序序列 R[l…n]2.算法实现将两个有序的子系列归并为一个序列//将 R[low...mid],R[mid...high]归并为有序表T[low...high]...原创 2020-03-09 14:11:02 · 511 阅读 · 0 评论 -
C语言数据结构与算法---选择排序---堆排序
文章目录一. 堆的定义二. 堆排序需要解决的问题三. 算法实现1. 筛选(堆调整)的算法实现2. 堆的建立3. 堆排序一. 堆的定义堆是具有如下性质的完全二叉树:大顶堆:每个结点的值都大于或等于其左右孩子结点的值小顶堆:每个结点的值都小于或等于其左右孩子结点的值判断数组是否是堆:按照层序遍历的方式给结点从1开始标号。堆排序:若在输出堆顶的最小值(最大值)后,使得剩余 n-1 个...原创 2020-03-08 11:06:28 · 519 阅读 · 0 评论 -
C语言数据结构与算法---希尔排序
希尔排序希尔排序是插入排序的一种直接插入排序在基本有序时或待排序的记录个数较少时效率较高,且比较一次,移动一步。希尔排序基本思想:先将整个待排记录序列分割成若干自序列,分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。方法思路:定义增量序列 Dk:Dm > Dm-1 > … >D1=1对每个 Dk 进行插入排序特点:...原创 2020-03-07 15:10:19 · 595 阅读 · 0 评论 -
C语言数据结构与算法---简单的排序
文章目录一. 排序的基本概念1. 排序的分类2. 具体的的解析二. 简单的排序实现1. 冒泡排序2. 简单的选择排序3. 插入排序一. 排序的基本概念1. 排序的分类2. 具体的的解析什么是稳定性?假设 Ki = Kj ( 1<= i <=n, 1<= j <=n ,i≠j),且在排序浅的序列中 ri 领先于rj (即 i < j)。如果排序后 ri ...原创 2020-03-07 14:13:34 · 333 阅读 · 0 评论 -
C语言数据结构与算法---散列表(哈希表)的查找
文章目录一. 散列表的基本概念二. 散列函数的构造方法1. 要求2. 方法三. 散列函数的实现一. 散列表的基本概念基本思想:记录的存储位置与关键字之间存在对应关系优点:查找效率高缺点:空间效率低散列方法: 选取某个函数,依该函数按关键字计算元素的存储位置,并按此存放;查找时,由同一个函数对给定 k 计算地址,将 k 地址单元中有关元素关键码进行对比,确定查找是否成功。散列函数: 散列...原创 2020-03-05 18:15:09 · 3746 阅读 · 3 评论 -
C语言数据结构与算法---查找
文章目录一. 查找的基本概念二. 线性表的查找1. 顺序查找(线性查找)2. 有序表查找(折半查找)3. 插值查找4. 分块查找一. 查找的基本概念在哪里找?----------------查找表查找表是由同一类型的数据元素(或记录)构成的集合。由于“集合”中的元素之间存在着松散的关系,因此查找表是一种应用灵便的结构。什么是查找?根据给定的某个值,在查找表中确定一个关键字...原创 2020-03-05 13:19:16 · 1073 阅读 · 0 评论 -
C语言数据结构与算法---拓扑排序、关键路径
文章目录一. 有向无环图二. 拓扑排序1. 分析2. 拓扑排序的定义及方法3. 拓扑排序的重要应用4. 拓扑排序的算法实现三. 关键路径1.分析2. 什么是关键路径3. 关键路径的算法实现一. 有向无环图有向无环图:无环的有向图,简称 DAG 图有向无环图常用来描述一个工程或系统的进行过程。(通常把计划、施工、生产、程序流程等当成是一个工程)一个工程可以分为若干个子工程(活动),只要完成...原创 2020-03-03 17:39:16 · 2204 阅读 · 1 评论 -
C语言数据结构与算法---最短路径(弗洛伊德算法)
文章目录一. 求所有顶点间的最短路径二. 弗洛伊德(Floyd)算法1. 算法思想2. 代码实现一. 求所有顶点间的最短路径方法一:每次以一个顶点为源点,重复执行迪杰斯特拉算法 n 次方法二:使用弗洛伊德算法两种方法的时间复杂度相同都为 n^3,但是弗洛伊德算法却更为简单二. 弗洛伊德(Floyd)算法1. 算法思想逐个顶点试探从 Vi 到 Vj 的所有可能存在的路径选出一条长...原创 2020-03-02 18:01:47 · 4718 阅读 · 8 评论 -
C语言数据结构与算法---最短路径(迪杰斯特拉算法)
文章目录一. 最短路径二. 迪杰斯特拉(Dijkstra)算法1. 算法思路2. 代码实现一. 最短路径在网图和非网图中,最短路径的含义是不同的非网图:因为边上没有权值,所谓最短路径,其实是指两个顶点之间经过的边数最少的路径。网图:两点之间经过的边上权值之和最少的路径。称路径上第一个顶点是源点,最后一个顶点是终点。二. 迪杰斯特拉(Dijkstra)算法用于单源最短路径1. 算法思路...原创 2020-03-02 17:05:51 · 6534 阅读 · 1 评论 -
C语言数据结构与算法---最小生成树(克鲁斯卡尔算法)
文章目录一.克鲁斯卡尔(Kruskal)算法1.算法思想2. 克鲁斯卡尔算法的实现二. 普利姆算法与克鲁斯卡尔算法的比较1. 时间复杂度2.适应范围一.克鲁斯卡尔(Kruskal)算法1.算法思想设连通网 N = (V,E) ,令最小生成树初始状态为只有 n 个顶点而无边的非连通图 T=(V,{}),每个顶点自成一个连通分量在 E 中选取代价最小的边,若该边依附的顶点落在 T 中不同的...原创 2020-03-01 14:50:13 · 4292 阅读 · 3 评论 -
C语言数据结构与算法---最小生成树 (普利姆算法)
文章目录一. 最小生成树1. 生成树2. 最小生成树二. 普利姆(Prim)算法1. 算法思想2. 普利姆算法的实现一. 最小生成树1. 生成树生成树:所有顶点均由边连接在一起,但不存在回路的图特点:生成树的顶点个数必须与图的顶点个数相同生成树是图的极小连通子图,去掉一条边则非连通一个有 n 个顶点的连通图的生成树有 n-1 条边含有 n 个顶点, n-1 条边的图不一定是生成树...原创 2020-03-01 12:51:00 · 5699 阅读 · 0 评论 -
C语言数据结构与算法---图的遍历
文章目录一. 深度优先搜索(DFS)1.概念及实现原理2. 深度优先遍历的实现代码1. 若图为邻接矩阵2. 若图为邻接表二. 广度优先搜索(BFS)1. 概念及实现原理2. 广度优先遍历的实现代码1. 若图为邻接矩阵2. 若图为邻接表一. 深度优先搜索(DFS)1.概念及实现原理首先从A开始,在没有碰到重复顶点的情况下,始终是想右手边走,于是到了B。根据右手通行原则到了C,D,E,F当继续...原创 2020-02-29 17:18:45 · 3954 阅读 · 1 评论 -
C语言数据结构与算法---图的存储结构(十字链表、邻接多重表)
文章目录一. 十字链表--有向图二. 邻接多重表--无向图一. 十字链表–有向图存储有向图的存储结构把邻接表和逆邻接表结合起来定义顶点表结点结构:data:顶点的数据域;firstin:入边表头指针,指向该顶点的入边表的第一个结点;firstout:出边表头指针,指向该顶点的出边表的第一个结点;边表结点结构:tailvex:指该弧的弧尾的所在数组下标;headvex:指该弧...原创 2020-02-29 15:28:18 · 737 阅读 · 0 评论 -
C语言数据结构与算法---图的存储结构(邻接矩阵、邻接表)
文章目录一. 邻接矩阵1. 无向图2. 有向图3. 网图4. 邻接矩阵的建立5. 邻接矩阵的优劣二. 邻接表1.无向图2.有向图3.网图4. 邻接表的建立5. 邻接表的优劣三. 邻接矩阵与邻接表的关系一. 邻接矩阵数组表示法1. 无向图图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信...原创 2020-02-29 14:47:26 · 3694 阅读 · 0 评论 -
C语言数据结构与算法---图的基础
文章目录1.基本定义2. 各种图的定义3. 图的顶点与边的关系4. 连通图5. 连通图的生成树1.基本定义图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合图中数据元素称为顶点(Vettex),任意两个顶点间都可能有关系,定点之间的逻辑关系用边表示,边集可以为空。2. 各种图的定义无向边:若...原创 2020-02-29 11:27:50 · 950 阅读 · 0 评论 -
C语言 数据结构与算法---哈夫曼树(编码)
文章目录一. 关于赫夫曼树二. 赫夫曼树的结构三. 赫夫曼树的实现代码一. 关于赫夫曼树路径:从树中一个结点到另一个结点之间的分支构成两个结点之间的路径。路径长度:路径上的分支数目树的路径长度:从树根到每一结点的路径之和结点的权:树结点间的边相关数结点的带权路径长度:从根结点到该结点之间的路径长度与该结点的权的乘积树的带权路径长度(WPL):树中所有叶子结点的带权路径长度之和赫夫...原创 2020-02-28 17:04:46 · 2442 阅读 · 0 评论 -
C语言 数据结构与算法---AVL-平衡二叉树
文章目录一. 平衡二叉树的概念1.为什么需要平衡二叉树2.平衡因子一. 平衡二叉树的概念1.为什么需要平衡二叉树为了避免这种情况发生,提高效率2.平衡因子左右子树高度只差平衡二叉树,也被称为高度平衡树。相比于”二叉查找树”,它的特点是:AVL树中任何节点的两个子树的高度最大差别为1。...原创 2020-02-28 12:41:26 · 634 阅读 · 0 评论 -
C语言 数据结构与算法---二叉排序(查找)树
文章目录一. 什么是二叉排序树二. 二叉排序树的结构三. 二叉排序树的查找四. 二叉排序树的插入五. 二叉排序树的删除六. 二叉排序树的最值一. 什么是二叉排序树二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。它可以是一棵空树。特点:若它的左子树不为空,则左子树上所有结点的值均小于它的根结构的值。若它的右子树不为空...原创 2020-02-27 15:35:02 · 2032 阅读 · 0 评论 -
C语言 数据结构与算法---线索二叉树
文章目录一. 线索二叉树的基础二. 结构实现1. 普通线索二叉树2. 含头结点的线索二叉树一. 线索二叉树的基础线索: 指向前驱和后继的指针线索链表:加上线索的二叉链表线索二叉树:加上线索的二叉树(相当于一个双向链表)线索化:对二叉树以某种次序遍历使其变为线索二叉树的过程线索化的过程就是在遍历中修改空指针的过程如何知道rchild(lchild)是指向右(左)孩子还是后继呢?设置两...原创 2020-02-26 14:16:19 · 533 阅读 · 0 评论 -
C语言 数据结构与算法---二叉树
文章目录一. 二叉树的性质1. 满二叉树2. 完全二叉树:3. 二叉树的性质二. 二叉链表1. 二叉树的结构2. 二叉树的遍历3. 二叉树的建立一. 二叉树的性质1. 满二叉树在一棵二叉树上,如果所有分支结点都存在左子树和右子树,并且所有叶子都在一层上,这样的二叉树称为满二叉树。特点:叶子只能出现在最下一层,出现在其它层就不可能达到平衡非叶子结点的度一定为2在同样深度的二叉树中,满...原创 2020-02-26 11:51:02 · 867 阅读 · 0 评论 -
C语言 数据结构与算法---静态链表
一.基本概念静态链表 :用数组描述的链表备用链表 :未被使用的数组元素每一个元素的游标域存储着下一个元素的下标;最后一个元素的游标为0;第一个和最后一个元素不存数据;0号元素存储着 备用链表 的第一个元素的下标;最后一个元素的游标存放第一个有数值元素的下标(相当于链表中的头结点);二.实现...原创 2020-02-26 10:18:02 · 469 阅读 · 0 评论