数据结构笔记
文章平均质量分 57
HairLossException
这个作者很懒,什么都没留下…
展开
-
严蔚敏C语言无向图BFS和DFS代码实现
严蔚敏C语言无向图BFS和DFS完整代码实现原创 2022-05-23 14:23:23 · 1096 阅读 · 1 评论 -
队列——数据结构严蔚敏C语言版
文章目录队列的定义环形队列循环队列的基本操作链队链队的基本操作队列的定义队列(Queue):先进先出的线性表队列是仅在队尾进行插入和队头进行删除操作的线性表队头(front):线性表的表头端,即可删除端队尾(rear):线性表的表尾端,即可插入端由于这种队列存在假溢出现象,所以引入了循环链表解决假溢出想象什么是假溢出可参考这篇文章环形队列区别环形队列是满队还是空队的两种方式另设一个标志以区别队列是满队还是空队少用一个元素空间队空的条件:Q.front == Q.rear原创 2022-03-28 10:59:03 · 1365 阅读 · 0 评论 -
表达式求值——数据结构严蔚敏C语言版栈数据结构课后练习
【题目】任何一个表达式都由操作数、运算符和界限符组成的,为了叙述的简洁,在此仅讨论简单算数表达式的求值问题,这种表达式只包含加、减、乘、除4种运算符。例如:控制台输入 2*(2+3)-5+4*5控制台输出 25我们知道,算术四则运算遵循以下3条规则:1、先乘除后加减2、从左到右运算3、先括号内后括号外【思路分析】1、通过for循环索引来遍历我们输入的表达式2、如果索引处的值是数字就直接压入数字栈3、如果索引处的值是运算符分两种情况3.1、如果符号栈为空就直接入栈3.2、如果符号栈原创 2022-03-21 19:17:00 · 2000 阅读 · 2 评论 -
单链表课后算法设计题——数据结构C语言版严蔚敏
文章目录算法设计题2、(3)算法设计题2、(4)求并集算法设计题2、(3)【题目】已知两个链表A和链表B分别表示两个集合,其元素递增排列。请设计一个算法用于求出A和B的交集,并存放到A链表中。【思路分析】1、定义两个指针a、b分别指向链表A和链表B的首元结点 和一个int类型的i变量用于记录要插入结点的位置2、当a指向结点的data小于b指向的结点的data,a向后移动一个结点并且删除之前指向的结点3、当a指针指向的data大于b指向的结点的data,b向后移动一个结点4、当a指向的结点da原创 2022-03-14 15:10:23 · 2679 阅读 · 0 评论 -
数据结构C语言版严蔚敏——每周一更新
由n(n>=0)个数据特性相同的元素构成的有序序列称为线性表,线性表中的元素个数n定义为线性表的长度,n=0时称为空表。对于非空的线性表或线性结构(1)存在唯一的一个被称作“第一个”的数据元素(2)存在唯一的一个被称作“最后一个”的数据元素(3)出第一个元素之外,结构中的每个数据元素均只有一个前驱(4)除最后一个元素之外,结构中每个数据元素均只有一个后继原创 2022-03-07 16:13:11 · 1153 阅读 · 1 评论 -
最小生成树(Prim算法实现)
最小生成树在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边,而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集,使得 w(T) 最小,则此 T 为 G 的最小生成树。最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。Prim算法普利姆算法(Prim)求的是最小生成树,也就是在包含n个顶点的无向连通图中找到(n-1)条边包含所有n个顶点的连通子图。代码/*无向连通图*/public class Graph {原创 2022-02-16 15:31:55 · 794 阅读 · 0 评论 -
汉诺塔问题
汉诺塔问题的由来相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。思路分析如果圆盘的数量只有一个就直接将圆盘从初始柱移动到目标柱圆盘数量为2时将小的圆盘移动到辅助柱然后将大圆盘移动到目标柱若有n个原创 2022-02-13 16:48:10 · 2810 阅读 · 0 评论 -
深度优先遍历(DFS)和广度优先遍历(BFS)
文章目录深度优先遍历深度优先遍历的步骤代码运行结果广度优先遍历广度优先遍历的步骤代码运行结果深度优先遍历深度优先遍历是从初始顶点出发,初始顶点可能存在有个邻接顶点,深度优先遍历的策略就是首先访问第一个邻接顶点,然后再以这个被访问的邻接顶点作为初始顶点访问它的第一个邻接顶点。深度优先遍历的步骤(1) 访问顶点v,并将访问点v标记成已访问。(2) 依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问。(3) 若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发原创 2022-02-12 23:08:11 · 872 阅读 · 0 评论 -
图的基本介绍
文章目录图图的表示方式创建图的代码打印图的邻接矩阵图图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。结点也可以称为顶点。图可以分为有向图和无向图无向图:边仅仅连接两个顶点,没有其他含义。有向图:边不仅连接两个顶点,且具有方向。图的表示方式图的表示方式有两种:邻接矩阵(二维数组表示)、邻接表(链表表示)创建图的代码public class Graph { /*存储顶点的集合*/ private ArrayList<String原创 2022-02-12 17:15:44 · 516 阅读 · 0 评论 -
红黑树的创建
红黑树由2-3-4树演变而来。在开始红黑树之前我先介绍一下2-3-4树。2-3-4树是一种阶为4的B树。它是一种自平衡的数据结构,可以保证在O(lgn)的时间内完成查找、插入和删除操作。它主要满足以下性质:1、2-3-4树所有的叶子结点都在同一层2、结点只能是2结点或3结点或4结点2结点:要么有2个子结点,要么没有子结点3结点:要么有3个子结点,要么没有子结点4结点:要么有4个子结点,要么没有子结点2-3-4树如原创 2022-02-11 21:49:06 · 1131 阅读 · 0 评论 -
平衡二叉树(AVL树)的创建
文章目录二叉排序树存在的问题平衡二叉树二叉树不平衡的情况单旋转双旋转左旋思路分析代码运行结果二叉排序树存在的问题假设有数列{1,2,3,4,5,6} 创建二叉排序树后如下图所示。下面的二叉排序树处在一些问题:1、左子树全部为空,从形式上看更像单链表2、查询速度明显降低不能发挥BST的优势,其查询效率还不如单链表采用平衡二叉树可以避免这种情况的发生平衡二叉树平衡二叉树(AVL树)是一颗空树或者它的左右两个子树的高度差的绝对值不超过1并且左右子树也是平衡二叉树。AVL树是最先发明的自平衡二叉查找原创 2022-02-10 20:40:45 · 5181 阅读 · 0 评论 -
二叉排序树(BST)
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。是数据结构中的一类。在一般情况下,查询效率比链表结构要高。二叉树的特点一棵空树,或者是具有下列性质的二叉树:若左子树不空,则左子树上所有结点的值均小于它的根结点的值若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值左、右子树也分别为二叉排序树原创 2022-02-09 22:23:01 · 1280 阅读 · 0 评论 -
Java实现哈夫曼编码与解码
哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。思路分析以压缩字符串为例1、计算各个字符的数量2、按照字符出现的次数为权值构建哈夫曼树3、根据哈夫曼树生成前缀码4、根据原创 2022-02-08 20:55:40 · 2764 阅读 · 6 评论 -
哈夫曼树代码实现
给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。路径长度:从根结点到某结点的边数结点的带权路径长度:从根结点到该节点之间的路径长度与该结点的权的乘积树的带权路径长度(WPL):所有叶子结点的带权路径长度之和哈夫曼树:WPL最小的二叉树原创 2022-02-06 15:10:45 · 1072 阅读 · 0 评论 -
Java堆排序
堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。大顶堆:每个结点的值都大于或等于左右子结点的值小顶堆:每个结点的值都小于或等于左右子结点的值堆排序堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。思路分析1、将待排序的序列构造成一个大顶堆(升序大顶堆降原创 2022-02-06 07:15:00 · 6914 阅读 · 0 评论 -
线索二叉树
文章目录线索二叉树概念线索二叉树的优缺点代码实现运行结果线索二叉树概念对于n个结点的二叉树,在二叉链存储结构中有n+1个空链域,利用这些空链域存放在某种遍历次序下该结点的前驱结点和后继结点的指针,这些指针称为线索,加上线索的二叉树称为线索二叉树。这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。线索二叉树的优缺点优点:利用线索二叉树进行中序原创 2022-02-05 17:15:55 · 547 阅读 · 0 评论 -
二叉树顺序存储
文章目录二叉树顺序存储的概念二叉树顺序存储的特点代码实现输出结果二叉树顺序存储的概念二叉树顺序存储是二叉树的一种存储方式。二叉树的顺序存储就是用一组连续的存储单元存放二又树中的结点元素,一般按照二叉树结点自上向下、自左向右的顺序存储。使用此存储方式,结点的前驱和后继不一定是它们在逻辑上的邻接关系,非常适用于满二又树和完全二又树。二叉树顺序存储的特点二叉树顺序存储通常只考虑完全二叉树第n个元素的左子结点为第2*n+1个元素第n个元素的右子结点为第2*n+2个元素第n个元素的父节点为第(n-1)原创 2022-02-05 14:04:09 · 1852 阅读 · 0 评论 -
二叉树删除结点
文章目录删除要求思路分析代码实现运行结果删除要求由于我现在所学习的二叉树并不是二叉有序树所以对二叉树的删除条件做了些变动:如果删除的结点是叶子结点,则删除该结点如果删除的结点是非叶子结点,则删除该子树思路分析1、如果该树只有一个根结点 那么将树置空2、如果当前结点的左子结点不为空并且左子结点就是要删除的结点就将当前结点的左子结点置空并且返回结束递归3、如果当前结点的右子结点不为空并且右子结点就是要删除的结点就将当前结点的右子结点置空并且返回结束递归4、如果当前结点的左右子节点并不是要删原创 2022-02-05 08:00:00 · 1123 阅读 · 0 评论 -
二叉树的前序、中序、后序查找
文章目录思路分析代码运行结果思路分析前序查找:先判断当前结点的id是否等于要查找的id如果是相等,则返回当前结点如果不相等,则判断当前结点的左子节点是否为空,如果不为空,则递归前序查找左子树如果左递归前序查找,找到结点,则返回,否继续判断,当前的结点的右子节点是否为空,如果不为空,则继续向右递归前序查找右子树.这里我子介绍前序查找的思路,中序和后序查找的思路和前序查找的思路差不多代码/** * 模拟结点 */public class Node { private int原创 2022-02-04 16:04:57 · 908 阅读 · 0 评论 -
前中后序遍历二叉树
文章目录二叉树的概念二叉树的遍历代码实现结果输出二叉树的概念什么是二叉树?每个结点最多只有两个结点的树称为二叉树,如下图所示如果二叉树的所有叶子结点都在最后一层并且结点的总数=2^n-1,其中n为层数,则称其为满二叉树如果该二叉树的所有叶子结点都在最后一层或者倒数第二层,而且最后一层的叶子结点在左边连续,倒数第二层的也自己结点在右边连续,我们称为完全二叉树二叉树的遍历二叉树的遍历分为三种:前序遍历:先输出父结点,再遍历左子树,再遍历右子树中序遍历:先遍历左子树,再输出父结点,再遍历右原创 2022-02-04 14:43:46 · 503 阅读 · 0 评论 -
Java简单实现链式哈希表
文章目录什么是哈希表试题代码输出结果什么是哈希表散列表(Hash table 也叫哈希表),是通过关键码值(key value)而直接进行访问的数据结构。也就是说,它通过关键码值映射到表中的一个位置来访问记录,以加快查找的速度。这个映射函数也叫散列函数,存放记录的数组也叫散列表。试题有一个公司,当有新员工来报道时,要求将员工的信息加入(id,性别,年龄,名字,住址),当输入员工的id时要求查找到员工的所有信息。要求:不使用数据库,速度越快越好。代码Emp:雇员类模拟结点public cl原创 2022-02-03 16:34:14 · 1937 阅读 · 1 评论 -
斐波那契查找算法
文章目录什么是斐波那契数列斐波那契查找介绍思路分析代码实现结果输出什么是斐波那契数列斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、…,在数学上,斐波那契被递归方法如下定义:F(1)=1,F(2)=1,F(n)=f(n-1)+F(n-2)(n>=2)。该数列越往后相邻的两个数的比值越趋向于黄金比例值(0.618)。斐波那契查找介绍斐波那契搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术。斐波那契搜索就是在二分查找的原创 2022-02-02 19:52:00 · 948 阅读 · 1 评论 -
插值查找算法
文章目录插值查找简介代码实现运行结果插值查找简介插值查找,有序表的一种查找方式。插值查找是根据查找关键字与查找表中最大最小记录关键字比较后的查找方法。插值查找基于二分查找,将查找点的选择改进为自适应选择,提高查找效率。为什么要使用插值查找?假设有这样1个数组arr = [1,2,3,4…,100] 要求我们查找的目标元素是1,使用二分查找的话我们需要经过多次判断才能找到这个目标元素。使用插值查找,根据公式mid = 0+(1-1)/(100-1)*(99-1) = 0 我们在第二次就能找到目标元素原创 2022-01-04 00:00:00 · 396 阅读 · 1 评论 -
Java二分查找
文章目录二分查找简单介绍思路分析代码实现结果演示二分查找简单介绍二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列思路分析首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功原创 2022-01-02 20:35:40 · 140 阅读 · 0 评论 -
Java实现基数排序
文章目录什么时基数排序思路分析代码实现运行结果基数排序的优缺点什么时基数排序基数排序(radix sort)又称“桶子法”(bucket sort)顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,以达到排序的作用,基数排序法是属于稳定性的排序,在某些时候,基数排序法的效率高于其它的稳定性排序法。思路分析基数排序是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进原创 2021-12-29 19:49:04 · 1000 阅读 · 1 评论 -
Java实现归并排序
文章目录归并排序思路分析结果输出归并排序归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。思路分析归并操作,也叫归并算法,指的是将两个顺序序列合并成一个顺序序列的方法。如 设有数列{4,6,3,7,5,9,2,0}初始状态:4,6,3,7,5,9,2,0第一次原创 2021-12-27 22:28:49 · 459 阅读 · 1 评论 -
Java实现快速排序
文章目录快速排序简介思路分析代码实现结果输出快速排序简介快速排序是对冒泡排序的一种改进,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另外一部分所有的数据都小,然后按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序列。思路分析以{5,3,7,6,8,2,9}为例,我们这里以中间数6为基数进行快速排序初始数据 {5,3,7,6,8,2,9}第1轮划分后的数据 {5,3,2} 6 {8,7,9}第2轮划分后的数据 {2} 3 {5} 6原创 2021-12-27 14:24:09 · 545 阅读 · 0 评论 -
Java实现希尔排序
文章目录希尔排序介绍思路分析代码实现运行结果对比10万个数希尔排序和插入排序的效率执行结果希尔排序介绍希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 D.L.Shell 于 1959 年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。思路分析假设待排序文件有10个记原创 2021-12-22 15:50:07 · 690 阅读 · 0 评论 -
Java实现插入排序
文章目录插入排序简单介绍插入排序基本思想思路分析插入排序简单介绍插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动 。插入排序基本思想插入排序的工作方式像许多人排序一手扑克牌。开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从原创 2021-12-22 12:48:05 · 322 阅读 · 0 评论 -
选择排序(Java实现)
文章目录什么是选择排序思路分析代码实现输出结果什么是选择排序选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。思路分析以{5,3,9,7,1}为例 蓝色表示参与比较的最小数 红色表示已经完成排序的数初始状态:5,3,9,7,1第1次排序结果:1,3,9,7,5第2次原创 2021-12-19 13:23:01 · 715 阅读 · 0 评论 -
冒泡排序及优化(Java实现)
文章目录什么是冒泡排序思路分析代码实现结果输出什么是冒泡排序冒泡排序指重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从小到大)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。思路分析以{5,3,9,7,1}为例 要求排序后的数组元素顺序按从小到大排序。依次比较相邻的两个数(原创 2021-12-18 22:32:13 · 686 阅读 · 1 评论 -
递归回溯解决八皇后问题(Java)
文章目录问题由来思路分析代码实现测试结果问题由来八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问题。思路分析在这里我们用四皇后来简化分析首先将第一个皇后放原创 2021-12-17 19:39:48 · 752 阅读 · 1 评论 -
Java实现迷宫问题(递归实现)
问题由来迷宫实验是取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒中设置了许多墙,对行进方向形成了多处阻挡。盒子仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。对同一只老鼠重复进行上述实验,一直到老鼠从入口到出口,而不走错一步。老鼠经多次试验终于得到它学习走迷宫的路线。问题的描述有一个迷宫地图,有一些可达的位置,也有一些不可达的位置(障碍、墙壁、边界)。从一个位置到下一个位置只能通过向上(或者向右、或者向下、或者向左)走一步来实现,从起点出发,原创 2021-12-15 16:53:13 · 3659 阅读 · 4 评论 -
初识递归(实现n的阶乘)
文章目录递归的基本概念递归的重要规则利用递归实现n的阶乘递归的基本概念在说什么是递归之前,我想你一定见过这个表情包吧什么是递归程序调用自身的编程技巧称为递归( recursion)递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。递归的用途递归可用于解决各种数学问题:八皇后问题、汉诺塔问题、阶乘问题、迷宫问题等递归也可用于各种算法:快排、归并排序、二分查找、分治算法等递归的重要原创 2021-12-15 14:36:37 · 792 阅读 · 0 评论 -
Java实现队列数据结构
文章目录队列的基本概念循环队列实现思路代码实现测试队列的基本概念什么是队列队列是一种特殊的线性表它只允许在表的前端(队头)进行删除操作在表的后端(队尾)进行插入操作队列是一个有序表(可以用数组或链表实现)队列先进先出队列开辟的是一块连续的空间顺序队列中的溢出现象:真溢出:当队列满时,做进栈运算产生空间溢出的现象。假上溢:由于入队和出队操作中,头尾指针只增加不减小,致使被删元素的空间永远无法重新利用。当队列中实际的元素个数远远小于向量空间的规模时,也可能由于尾指针已超越向量空原创 2021-12-14 22:04:37 · 709 阅读 · 0 评论 -
利用栈数据结构判断回文数据
Day1 数组模拟栈数据结构代码实现public class ArrayStack { //数组的长度 private int max; //栈帧 private int top; //stack数组模拟栈 private int[] stack; public ArrayStack(int max){ this.max = max; stack = new int[max]; top = -1;原创 2021-11-03 21:29:44 · 965 阅读 · 0 评论 -
Java实现将二维数组转化为链式储存
文章目录代码思路代码实现代码思路将二维数组压缩成链式存储大体思路与数组压缩成稀疏数组相似这里我将链表的头节点储存二维数组的总行数、列数和有效值个数 头结点之后的每个结点存储有效值的下标和值 转化思路如下图所示代码实现创建模拟结点的类 提供构造方法和toString/** * 模拟结点 */public class SingleNode { /** * @row 行号 * @column 列号 * @num 值 */ publi原创 2021-12-14 15:10:04 · 1125 阅读 · 1 评论 -
Java实现稀疏数组转化
什么是稀疏数组?稀疏数组可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组普通数组转化为稀疏数组代码实现原创 2021-12-12 20:00:29 · 282 阅读 · 1 评论 -
约瑟夫问题Java环形单向链表代码实现
这里写目录标题约瑟夫问题的由来解题思路代码实现测试约瑟夫问题的由来约瑟夫是1世纪的一名犹太历史学家。他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中。他们讨论是自杀还是被俘,最终决定自杀,并以抽签的方式决定谁杀掉谁。41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而约瑟夫和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程原创 2021-12-12 16:02:49 · 3195 阅读 · 3 评论 -
Java实现双向链表增删改查
双向链表带头节点的双向链表模拟结点双向链表的增删改查测试带头节点的双向链表什么是双向链表:双链表是链表的一种,由节点组成,每个数据结点中都有两个指针,分别指向直接后继和直接前驱。模拟结点//模拟双向链表的结点public class DoubleNode { //data域中的数据 public int id; public String name; public int price; //上一个结点(直接前驱) public Doubl原创 2021-12-11 19:46:10 · 544 阅读 · 0 评论