
数据结构
文章平均质量分 58
Big Big Dream
这个作者很懒,什么都没留下…
展开
-
二叉排序树的有关知识
什么是二叉排序树? 二叉排序树就是给一个根节点,在根节点右边的节点的值比它大,在根节点左边的值比他小。 一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值; (3)左、右子树也分别为二叉排序树; 代码实现: public static void main(String[] args) { int[] arr={7,3,10,12,5,1,9,2};原创 2022-02-13 17:22:22 · 587 阅读 · 0 评论 -
有关二叉树的遍历,查找,删除操作
什么是二叉树? 二叉树树主要分为根节点(root),左子节点(left),右子节点(right)。每个节点有包含自己对应的信息(年龄,姓名,左右节点等等) 二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分。 二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及...原创 2022-02-12 16:48:20 · 376 阅读 · 0 评论 -
哈希表初理解
什么是哈希表? 哈希表(Hash Table)也叫做散列表,是一种数据结构。 它通过把关键码值映射到表中一个位置来访问记录,以加快查找速度(相当于一个缓存)。这个映射函数叫做散列函数,存放记录的数组叫做散列表 我们通过在哈希表中创建private EmpLinkedList[] empLinkedListArray;来创建多个链表,每个链表都有首节点,通过散列函数指向下一个节点 代码实现思路: 首先我们先创建一个EmpNode类(相当于个人信息类),里面存放我们每个节点的信息。 /..原创 2022-02-10 15:55:39 · 461 阅读 · 0 评论 -
线性查找和二分查找
线性查找: 线性查找是最简单的对数组进行遍历的查找方法。 查找一个符合条件的数,代码如下: public static int linear2(int[] arr,int findVal){ for (int i = 0; i <arr.length ; i++) { if (arr[i]==findVal){ return i; } } return -1原创 2022-02-05 14:05:23 · 322 阅读 · 0 评论 -
归并排序(分治思想)
什么是分治? 分治法将问题分成一些小的问题然后递归求解,治就是一个合的思想。 分治_百度百科 归并排序代码思路: 分其实就是把一个数组从中间分成两个数组,左数组和右数组,分界点为mid=left+right/2,然后递归,最后得到上图所示蓝色字体的最后一行一个个单独的数组 治(合并)就是要求两个分好的数组进行按照一定规则的排序,这时我们使用三个指针来完成其操作,第一个left(i)指针是指向左数组的首节点,第二个指针mid+1(j)指向右数组的首节点,第三个指针temp[0](t)指向新建数组原创 2022-02-03 15:23:26 · 711 阅读 · 0 评论 -
快速排序算法
快速排序是什么? 快速排序算法通过多次比较和交换来实现排序,其排序流程如下 (1)首先设定一个分界值,通过该分界值将数组分成左右两部分。 (2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。 (3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。 (4)重复上述...原创 2022-01-28 16:42:24 · 660 阅读 · 0 评论 -
希尔排序算法
什么是希尔排序? 希尔排序是希尔提出的一种排序算法,希尔排序也是一种插入排序,它是简单插入排序经过改进后的一个更高效的版本,也称为缩小增量排序。 希尔排序按照增量将数组进行分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,没组包含的关键词越来越多,当增量减至1时,整个文件被分成一组,算法便终止 希尔排序_百度百科 希尔排序代码思想: 假设有一个数组arr[],里面有十个元素 第一次: gap=arr.length/2=5,将数组分为五组,每个数组元素的索引相差5(步长为5),然后每组进行排原创 2022-01-27 17:38:08 · 654 阅读 · 0 评论 -
插入排序算法
什么是插入排序? *插入排序的基本思想就是:把n个待排序的元素看成一个有序表和一个无序表。 *开始的时候有序表中有1个元素,无须表中包含n-1个元素,排序过程中每次从无需表中取出第一个元素,然后把它与有序表中的元素进行比较,将它插入到有序表中的适当的位置,成为新的有序表。 代码思路: 1,假设有一个指针(index),指向无序数组中的第一个元素,即arr[index]是无序数组中的第一个元素,我们定义一个变量来存储该值:int insetVal=arr[index],现在要将其插入到前面的有序数原创 2022-01-27 15:44:20 · 1031 阅读 · 0 评论 -
冒泡排序和选择排序
冒泡排序和选择排序的简单实现原创 2022-01-24 17:06:12 · 131 阅读 · 0 评论 -
排序(排序算法)
什么是排序算法? 排序也称为排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。 所谓排序算法,即通过特定的算法因式将一组或多组数据按照既定模式进行重新排序。这种新序列遵循着一定的规则,体现出一定的规律,因此,经处理后的数据便于筛选和计算,大大提高了计算效率。对于排序,我们首先要求其具有一定的稳定性,即当两个相同的元素同时出现于某个序列之中,则经过一定的排序算法之后,两者在排序前后的相对位置不发生变化。换言之,即便是两个完全相同的元素,它们在排序过程中也是各有区别的,原创 2022-01-23 13:52:07 · 390 阅读 · 0 评论 -
回溯之八皇后问题
1,什么是回溯? 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已经不满足求解条件时,就"回溯"返回,尝试别的路径。(走不通就退回去再走的技术) 第一个皇后摆在第一行第一列,然后开始试探,第二个皇后摆在哪里,才不会和第一个皇后冲突,第三个皇后摆在哪里,才不会和第二个皇后冲突。。。 如果遇到冲突,则把当前正在放置的皇后往后挪一格,如果 8 列都不行,那么就回溯至上一级皇后,让它试着挪一挪 回溯算法_百度百科 2.八皇后问题是什么? 八皇后问题就是:在 8× 8原创 2022-01-22 16:33:48 · 409 阅读 · 0 评论 -
递归与迷宫问题
1,什么是递归? 递归通俗来讲就是一个方法自己调用自己,每次调用的时候传入不同的变量 递归(编程技巧)_百度百科 2,递归需要遵循的原则 1,执行一个方法时,就创建一个新的受保护的独立栈空间(一个线程有自己独立的一个栈空间,每个方法调用对应一个栈帧) 2,方法的局部变量是独立的,不会相互影响,比如n变量 3,如果方法中使用的是引用类型的变量(比如数组map[][]),就会共享该引用类型的数据 4,递归必须向退出递归的条件逼近,否则就是无限递归,出现StackOverflowError.栈溢出问原创 2022-01-21 16:38:53 · 539 阅读 · 0 评论 -
单链表的有关知识以及增删改查
1,单链表是一种线性数据结构,但是它不一定是连续的,是一种链式存储结构(如下图) 单链表的每个节点分为data域(值域)和next域(指向下一个节点) 单链表分为有头节点和没有头节点,有头结点,头结点只有next域而没有data域 2,单链表的应用场景:举例水浒英雄排行榜(尚硅谷官方讲解): 定义: no:英雄编号 name:英雄名称 nikeName:英雄昵称 next:指向下一个英雄节点 特别注意: 插入的时候判断的条件是新插入节点的编号与temp.next.no做比较,即tem原创 2022-01-13 19:55:55 · 181 阅读 · 0 评论 -
数组模拟队列以及模拟环形队列的实现
队列是一种先进先出的有序列表,可以用数组或者链表来实现(例如:银行排队系统) 前提条件: maxSize :队列容量(数组的长度) arr :模拟队列的数组 front :指向队列头部元素的前一个元素,初始值为 -1 rear :指向队列尾部元素,初始值为 -1 首先判断: 队列判空:front == rear 队列判满:rear == (maxSize - 1) ,即 rear 是否已经指向了数组的最后一个位置 队列元素个数:rear - front 队列入队:队列不满才能入队,arr[++原创 2022-01-09 22:23:23 · 596 阅读 · 0 评论