数据结构与算法(java)
文章平均质量分 68
java版数据结构与算法
持久的棒棒君
我很懒,还没有添加简介
展开
-
数据结构与算法(java):图的加权实现
加权无向图、加权有向图简介无论时加权无向图还是加权有向图都是再无向图和有向图的基础上再定义边的大小而已,这个边的大小也叫做权重,不过这个权重的含义会根据问题的描述而不同,例如两个地点间的距离用权表示就路径长度,或者两个信号塔之间通信所花的时间也可用权重来表示,表示时长。加权的作用举个生活中常见的例子,例如从一个地方打车另一个地方,可以有多条路径做选择,毕竟条条大路通罗马嘛,但如果需要以最快的速度到达目的地呢,那么你需要找到花费时间最少的那条路径,怎么找呢?这就可以发挥加权的作用了,可以在每条路径上标原创 2022-05-09 12:06:39 · 408 阅读 · 0 评论 -
数据结构与算法(java):图的拓扑排序
图的拓扑排序简介AOV网在一个表示工程(例如拍戏、教学安排)的有向图中,用顶点表示活动(每个阶段该做的事情),用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网叫做AOV网(Activity On vertex NetWord)。AOV网中的弧表示活动之间存在某种制约关系。并且AOV网中不能出现回路。举个例子:拍戏这个工程,必须先把剧本给定好,然后再开始挑演员,选场地,进行拍摄,一步一步来,不能在拍摄过程中场地还没安排好就开始拍摄,也就是说拍摄的前提必须时场地给选好了。拓扑序列设G=(V原创 2022-04-21 23:45:00 · 1361 阅读 · 0 评论 -
数据结构与算法(java):图的基本概念、无向图和有向图的实现、图的搜索/遍历
图(java实现)原创 2022-04-12 14:22:48 · 1729 阅读 · 0 评论 -
数据结构与算法(java):树-并查集
并查集简介并查集是一种简单的用途广泛的集合,是一种树形的数据结构,可以实现较快的元素合并和元素是否在某一集合的判断,应用很多,如求无向图的连通个数,带限制的作业排序,实现kruskar算法求解最小生成树等。并查集时钟树形结构,但由于二叉树、红黑树、B数不一样,要求比较简单:1、每一个元素都唯一的对应一个结点2、每一组数据中的多个元素都在同一棵树中3、一个组中的数据对应的树和另外一个组中的树之间没有任何联系4、元素在树中并没有子父级关系的硬性要求例如:这是一组,里面有三个元素单个元素也原创 2022-03-15 18:48:34 · 1126 阅读 · 0 评论 -
数据结构与算法(java):树-平衡树(2-3树原理,红黑树,B树,B+树)
平衡树当我们依次往二叉查找树中插入9,8,7,6,5,4,3,2,1这个九个数据时,最终构出来的树是个非平衡树,如下:当要查找1这个元素时,查找效率会很低,原因在于这个树它不平衡,全部都是向左边的分支。如果让生成的树像完全二叉树那样,查找效率更高。常见的平衡树有如下几个2-3查找树,红黑树,B-树和B+树等。。。2-3查找树定义2-3查找树要么为空要么满足下面两个要求:2-结点:含有一个键(及其对应的值)和两条链,左链接指向2-3树中的键都小于该结点,右链接指向的2-3树中的键都大于该结点。原创 2022-03-12 15:42:53 · 1861 阅读 · 0 评论 -
数据结构与算法(java):树的基本概述
树概述定义树是计算机中非常重要的一种数据结构,树是由n(n>=1)个有限结点组成的一个具有层次关系的集合。之所以叫成树,是因为它看起来像一颗倒过来的树,根朝上,树叶朝下。相关术语(1)每个结点有0个或多个子结点;(2)父结点:就是结点的父亲,当前结点的上个结点。(3) 没有父节点的结点为根结点,例如上图中的A结点就是根结点(4)每一个非根结点只有一个父结点。(5)子树:每个结点及其后代整体上可以看做是一棵树,称为当前结点的父结点的一个子树(6)结点的度:一个结点含有的子树的个数。原创 2022-03-10 22:31:35 · 49 阅读 · 0 评论 -
数据结构与算法(java):堆排序
堆排序介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最好最坏,平均时间复杂度均为O(nlogn),是不稳定排序。基本思想将待排序序列构造成一个大顶堆(父结点大于两个子结点)此时,整个序列的最大值就是堆顶的根结点将其与末尾元素进行交换,此时末尾就为最大值将末尾这个最大值用排除堆之外,然后将剩余n-1个元素重新构成一个堆,这样就会得到n个元素的次小值,反复执行,按顺序排除出堆的元素就能组成一个有序队列了。问题描述给定一个数组,使用堆排序从小到大排序好,或者可原创 2022-03-06 16:35:20 · 224 阅读 · 0 评论 -
数据结构与算法(java):优先队列
最大优先队列原理及代码实现最小优先队列原理及代码实现最小索引优先队列的原理及代码实现原创 2022-03-03 21:05:37 · 617 阅读 · 0 评论 -
数据结构与算法(java):堆
栈原创 2022-03-01 18:48:10 · 947 阅读 · 0 评论 -
数据结构与算法(java):树-二叉树(二叉查找树(BST)、线索化二叉树、哈夫曼树、平衡二叉树【AVL】、二叉树的前中后序遍历)
树1、概述原创 2022-02-28 16:50:55 · 487 阅读 · 0 评论 -
数据结构与算法(java):线性表-符号表
符号表1、概述符号表和map集合很相像,由键值对组合而成,符号表中键也具有唯一性,通常也是根据键来找到键对应的值。如图2、分类1、底层是数组实现的符号表2、底层是链表的符号表,又分为无序和有序无序符号表有序符号表这里主要讲底层是链表实现的符号表。。。无序符号表public class SymbolTable<Key,Value> { //Key表示键,Value表示值 //记录首结点 private Node head; //记录符号表中的元素原创 2022-02-25 16:18:13 · 624 阅读 · 0 评论 -
数据结构与算法(java):线性表-队列
队列原创 2022-02-25 02:49:03 · 624 阅读 · 0 评论 -
数据结构与算法(java):线性表-栈
栈栈的某些应用原创 2022-02-21 23:09:26 · 624 阅读 · 0 评论 -
数据结构与算法(java):线性表(链表-环形链表与约瑟夫问题)
线性表(约瑟夫)原创 2022-02-19 20:11:02 · 458 阅读 · 0 评论 -
数据结构与算法(java):线性表(链表-快慢指针)
线性表(链表-单链表反转)原创 2022-02-18 19:35:06 · 385 阅读 · 0 评论 -
数据结构与算法(java):线性表(链表-单链表反转)
线性表(链表-单链表反转)原创 2022-02-18 12:52:00 · 315 阅读 · 0 评论 -
数据结构与算法(java):线性表(链表-双向链表)
线性表双向链表原创 2022-02-17 17:07:43 · 436 阅读 · 0 评论 -
数据结构与算法(java):线性表(链表-单向链表)
线性表链表单向链表原创 2022-02-17 14:30:21 · 490 阅读 · 0 评论 -
数据结构与算法(java):线性表(顺序表)
线性表顺序表定义原创 2022-02-15 19:00:33 · 438 阅读 · 0 评论 -
数据结构与算法(java):快速排序
数据结构与算法快排对冒泡排序的一种改进,基本思想是将要排序的数据分割成独立的两个部分,其中一部分的所有数据要比另外一部分的所有数据都要小,不断递归,直至有序基本原理1、设立一个分界值,这个分界值将数组分成左右两部分2、大于等于分界值的数据放在分界值右边,小于分界值的数据放在分解值左边(从小到大排序的情况下),此时,分界值左边的数全部小于分界值右边的数3、同时,分界值左右两边的数据又可以独立分割,左右两边的数据又可以各取一个分界值,大于等于分界值的数放右边,小于分界值的放左边。。。4、重复上述过原创 2022-02-12 20:28:16 · 514 阅读 · 0 评论 -
数据结构与算法(java):归并排序
归并排序高级排序原创 2022-02-07 16:36:33 · 995 阅读 · 0 评论 -
数据结构与算法(java):希尔排序
希尔排序插入排序的一种原创 2022-02-07 00:29:13 · 1809 阅读 · 0 评论 -
数据结构与算法(java):基础概念
数据结构1.基础概念什么是数据描述客观事物的符号,是计算机中可以操作的对象,能被计算机识别并且输入给计算机处理的符号集合。包括整型,实型等数值类型,甚至还包括字符,声音,图像视频等飞数据类型。什么是数据元素组成数据的有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。例如,在人类中,人就是数据元素;在畜禽类中,鸡、鸭,猪,马,羊等就是其数据元素。什么是数据项数据元素的组成单位,一个数据元素可以由若干个数据相组成。数据项是不可分割的最小单位。例如:人是一个数据元素,其数据项就可以原创 2022-01-03 16:54:21 · 385 阅读 · 0 评论 -
数据结构与算法(java):简单选择排序
基本原理每一轮在待排序的区域中比较找到一个最小值后,把这个最小值放到已经排好顺序的区域的末尾,剩下的部分,组成一个新的待排序部分,重复上面的步骤直到排序结束原理图代码演示 int[] arr = {1,2,3,5,2,6,8,5,9}; int min_value; //用来记录最小值 int min_pos; //用来记录最小值的下标 for(int i = 0; i<arr.length - 1; i++){ //原创 2021-09-27 23:19:05 · 57 阅读 · 0 评论 -
数据结构与算法(java):冒泡排序
为什么叫冒泡排序?不就说明它像泡泡从底部冒到水面上一样吗,自己脑补。。。简单来说就是在一组数据中,从左到右,俩俩比较,然后把较大的数据往前推,一轮下来之后,最大的一个数据就被推到了最右边。基本原理每轮从第一个元素开始,相邻两元素之间比较大小,交换元素彼此的位置,直到最后一对相邻元素总共进行n-1轮每轮进行n-i-1次比较(这是从下标为0开始的,如果是从下标为1开始,则每轮进行n-i次比较)代码实现1、不用i表示轮数 int [] arr = new int[]{1,2,3,4,4,2,5原创 2021-09-27 19:54:17 · 136 阅读 · 0 评论 -
数据结构与算法(java):直接插入排序
基本原理通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。原理图效果图代码实现...原创 2021-09-27 18:53:48 · 115 阅读 · 0 评论