数据结构
文章平均质量分 60
数据结构java+算法的学习笔记
..Serendipity
唯一不变的是变化本身
展开
-
图....
1. 为什么要有图线性表局限于一个直接前驱和一个直接后继的关系树也只能有一个直接前驱也就是父节点当我们需要表示多对多的关系时, 这里我们就用到了图2. 图基本介绍图的举例说明图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:2.1 图的常用概念顶点(vertex)边(edge)路径无向图(下图)无向图: 顶点之间的连接没有方向,比如A-B,即可以是 A-> B 也可以 B->A .路径: 比如从原创 2022-01-16 14:16:15 · 104 阅读 · 0 评论 -
树....
1. 二叉树1.1 为什么需要树这种数据结构1.1.1 数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低1.1.2 链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好。缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历)1.1.3 树存储方式的分析能提高数原创 2022-01-14 14:47:34 · 220 阅读 · 0 评论 -
堆排序..
1. 堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆大顶堆举例说明我们对堆中的结点按层进行编号,映射到数组中就是下面这个样子:大顶堆特点:arr[i] >= arr[2i+1]原创 2022-01-11 13:54:39 · 62 阅读 · 0 评论 -
希尔排序.
介绍希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。基本思想希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止图解代码实现第一次排序(步长为5) public static int[] shellSort(int [] arr){ int tem原创 2021-12-09 19:52:33 · 439 阅读 · 0 评论 -
插入排序.
简介插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。插入排序的思想插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。图解代码实现 /*** * @description: 插入排序原创 2021-12-09 16:15:54 · 477 阅读 · 0 评论 -
选择排序.
基本介绍选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。选择排序的思想图解分析代码实现将数组进行排序 [101, 34, 119, 1] // 选择排序 public static int[] selectSort(int [] arr){ // for (int i = 0; i < arr.length - 1; i++){ // 比较多少轮 bool原创 2021-12-08 16:02:43 · 366 阅读 · 0 评论 -
冒泡排序.
基本介绍冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。图示代码实现/*** * @description: 冒泡排序 设计这个算法,首先要先考虑我们要进行几轮比较,就是第一次for循环,(比较length-1轮) * 接着需要考虑每轮有几次比较,就是第二个for循环原创 2021-12-05 10:20:12 · 437 阅读 · 0 评论 -
前缀、中缀、后缀表达式
前缀、中缀、后缀表达式原创 2021-12-04 10:28:36 · 425 阅读 · 0 评论 -
栈实现计算器(简)
栈实现计算器原创 2021-12-03 15:42:30 · 434 阅读 · 0 评论 -
栈....
栈原创 2021-12-03 10:17:45 · 203 阅读 · 0 评论 -
双向链表.
双向链表双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。双向链表的逻辑结构双向链表的CURD实现定义一个节点class HeroNode2{ public int no; public String name; public String nickName; public HeroNode2 next; // next域 publi原创 2021-09-18 14:23:29 · 137 阅读 · 0 评论 -
单向链表.
单项链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域data,另一个是存储下一个结点地址的指针域next。链表可以是带头节点的,也可以不带头节点,具体看具体的需要。头节点一般默认的data不包含任何数据。单链表的示意图物理结构逻辑结构节点的定义属性定义:no(编号)name(名称)nickName(外号原创 2021-09-10 14:56:14 · 301 阅读 · 0 评论 -
队列和环形队列
队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。可以用数组或是链表来实现。图示队列使用数组来实现思路1:定义front和rear和maxsize,front是指向队列头的前一个位置,rear是指向队列尾的位置。front的默认值为-1,rear的默认值为-1。maxsize代表队列的最大长度。2:如何判断队列为空 isEmpt原创 2021-09-09 15:05:53 · 96 阅读 · 0 评论 -
稀疏数组和二维数组的转换
稀疏数组的定义在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。稀疏数组的意义普通的二维数组,若是数值为0的元素数目过多,且二维数组过大,在存储至磁盘时的效率低于稀疏数组的存储效率稀疏数组的格式二维数组的行数二维数组的列数二维数组的有效值的个数有效值的行数(下标从0开始)有效值的列数有效值应用场原创 2021-09-08 17:53:45 · 166 阅读 · 0 评论