Java数据结构与算法
平常心404
这个作者很懒,什么都没留下…
展开
-
数据结构与算法---图
图原创 2021-09-06 21:28:49 · 66 阅读 · 0 评论 -
数据结构与算法---AVL树
AVL树 定义 当我们在一个平衡二叉树上插入一个结点时,有可能导致失衡,即出现平衡因子绝对值大于1的结点。则必须重新调整树的结构,使之恢复平衡。当失衡结点不止一个时,则找失衡子树最小的根结点。 上图中的失衡结点应找16结点。 平衡调整 平衡调整的四种类型: LL型,插入结点在失衡结点左子树的左子树上 LR型,插入结点在失衡结点左子树的右子树上 RL型,插入结点在失衡结点右子树的左子树上 RR型,插入结点在失衡结点右子树的右子树上 调整原则:1)降低高度 2)保持二叉排序树性质—左边子树比根结点小原创 2021-09-06 11:09:11 · 111 阅读 · 0 评论 -
数据结构与算法---队列
数据结构之队列 思路:使用数组实现 有关队列的描述 1.队头与队尾: 允许元素插入的一端称为队尾,允许元素删除的一端称为队头。 2.入队:队列的插入操作。 3.出队:队列的删除操作。 public class Arrayqueue { private int front; private int rear; private int arr[]; private int Maxsize; public Arrayqueue() { } public Arrayqueue(int Max原创 2021-09-06 09:01:50 · 139 阅读 · 0 评论 -
数据结构与算法---二叉排序树
二叉排序树-BST 二叉排序树:对于二叉排序树的任何一个非叶子结点,要求左子结点的值比当前结点小,右子结点的值比当前结点的值大。若相同则可以放在左子结点或右子结点。 二叉排序树的创建和遍历 /** * 递归的添加结点 * * @param node */ public void add(Node node) { if (node == null) { return; } // 判断传入的值与当前子树的根结点值的关系 if (node.value < thi原创 2021-08-19 14:38:12 · 198 阅读 · 0 评论 -
数据结构与算法---单链表
单链表 单链表的逻辑结构: 单链表在内存中的存储: 小结: 1)链表是以结点的方式来存储,是链式存储 2)每个结点包括data域和next域(指向下一个结点) 3)链表的各个结点不一定是链式存储,逻辑结构上连续,物理结构上不一定连续 4)根据实际需求来确定链表是否需要头结点 单链表的创建和遍历 添加操作: // 添加结点到链表(直接添加到链表的最后) public void add(HeroNode heronode) { // 因为头结点不能动,辅助指针帮忙遍历 HeroN原创 2021-08-16 23:50:15 · 166 阅读 · 1 评论 -
数据结构与算法---线索二叉树
线索化二叉树 什么是线索化二叉树:n个结点的二叉链表中含有n+1[ 公式 2n-(n-1)= n +1 ]个空指针域。利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前驱和后继结点的指针的指针(这种附加的指针称为“线索”) 这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树。根据线索性质的不同,线索二叉树可分为前序线索二叉树,中序线索二叉树和后序线索二叉树。 一个结点的前一个结点称为前驱结点 一个结点的后一个结点称为后继结点 代码实现 ...原创 2021-08-16 10:33:39 · 163 阅读 · 0 评论 -
数据结构与算法---顺序存储二叉树
顺序存储二叉树 顺序存储二叉树的特点: 1.顺序存储二叉树通常只考虑完全二叉树 2.第n个元素的左子结点为 2 * n + 1 3.第n个元素的右子结点为 2 * n + 2 4.第n个元素的父节点为(n-1)/ 2 注:n表示二叉树中的第几个元素(按0开始编号) ...原创 2021-08-13 15:15:17 · 321 阅读 · 0 评论 -
数据结构与算法---二叉树
二叉树的查找和遍历 树的定义:树是n个结点的有限集。若n = 0,称为空树;若n > 0,则有且仅有一个特定称为根的结点,其余结点可以称为根的子树。 基本术语: 根结点:非空树中无前驱结点的结点(A)。 结点的度:结点拥有的子树数(A结点的度为3)。 树的度:树内各结点的度的最大值。 叶子结点(终端结点):度为0。 分支结点(非终端结点):度不为0,且根结点以外的分支结点称为内部结点。 孩子和双亲:结点的子树的根称为该结点的孩子,该结点称为孩子的双亲(A结点有三棵子树,三棵子树的根结点分别为B,C原创 2021-08-12 16:29:26 · 280 阅读 · 0 评论 -
数据结构与算法---希尔排序
希尔排序 由插入排序可以知道当插入的数是较小的数时,后移的次数明显增多,对效率有影响。 什么是希尔排序: 希尔排序也是一种插入排序。它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。 基本思想: 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件被分成一组,算法便终止。 希尔排序在排序的过程中按从小到大或从大到小的原则(我们选择),将小(大)的数往左边靠,避免了特别小(大)的数出现在最后导致需要移动原创 2021-08-11 15:30:25 · 166 阅读 · 0 评论 -
数据结构与算法---插入排序
插入排序 什么是插入排序: 插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。 排序规则: 代码实现:原创 2021-08-10 15:07:42 · 44 阅读 · 0 评论 -
数据结构与算法---选择排序
选择排序 什么是选择排序 : 选择排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。原创 2021-08-10 14:58:10 · 69 阅读 · 0 评论 -
数据结构与算法---冒泡排序
二.队列 使用数组实现队列: 因为队列的输入和输出是分别从前后端来处理,因此需要两个变量front和rear分别记录队列的前后端的下标,front会随着数据输出而改变,而rear则是随着数据输入而改变。 ...原创 2021-08-10 10:02:11 · 67 阅读 · 0 评论 -
数据结构与算法---稀疏数组
一.稀疏数组 假如有一个棋盘,棋盘上面0表示无棋子,1表示黑棋子,2表示蓝棋子。 我们使用一个二维数组来记录棋盘上面棋子的位置。所以可能会出现很多为(0,0)的元素。这时我们就可以使用稀疏数组来记录棋盘中的有效元素,即该位置上存在棋子的情况。 稀疏数组:存放的是原二维数组的行,列数和有效元素的个数,有效元素的索引和值。 比如我们有一个11*11的二维数组,数组上面有两个棋子,假定第二行第三列有一颗蓝棋,第三行第四列有一颗黑棋。那么此二维数组的第一行保存的即为二维数组的大小和有效元素个数,第二行保存的是蓝棋的原创 2021-04-22 19:28:22 · 34 阅读 · 0 评论