![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
一些整理的笔记
Cherish_喜爱
前端菜虫
展开
-
顺序存储二叉树
基本说明: 从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组。要求: 二叉树的结点以数组的方式存放。在遍历数组的时候仍然可以以前序遍历,中序遍历,后序遍历的方式完成结点的遍历。思路:首先我们创建一个类在里面定义一个数组,将主方法定义的数组存入到创建的类中。顺序存储二叉树的特点:顺序二叉树通常只考虑完全二叉树。第n个元素的左子结点为 2*n+1。第n个元素的右子结点为 2*n+2。第n个元素的父结点为(n-1)/2。n表示二叉树中的第几原创 2020-12-04 20:58:09 · 249 阅读 · 0 评论 -
希尔排序--交换式算法实现
基本思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。代码实现:分步演示:package shellSort;import java.util.Arrays;public class shellsort { public static void main(String[] args) { int arr[] = {8,9,1,7,2,3,5,4,6,0}; she原创 2020-05-31 15:31:13 · 204 阅读 · 1 评论 -
排序算法介绍
一、排序算法的介绍:排序算法也称排序是算法不是数据结构。排序是将一组数据,依指定的顺序进行排列的过程。二、排序的分类:内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。外部排序:数据量过大,无法加载到内存中,需要借助外部存储进行排序。...原创 2020-05-29 15:10:53 · 152 阅读 · 0 评论 -
冒泡排序--优化
小结:一共进行数组的大小-1次的循环每一趟排序的次数在逐渐的减少优化:当我们发现在某趟排序中,没有发生一次交换,可以提前结束冒泡排序。时间复杂度为O(n^2)代码演示:class Main{ public static void main(String[] args){ int arr[] = {3,-1,9,8,7} buddle(arr); } public static void buddle(int[] arr){ int L = 0; boolean flag原创 2020-05-29 10:14:35 · 102 阅读 · 0 评论 -
排序算法--插入排序
插入排序基本介绍: 插入排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。基本思想: 是一种简单直观且稳定的排序算法。插入算法把要排序的数组分成两部分:第一部分为有序表,开始时有序表只包含一个元素,第二部分为无序表,无序表中有n-1个元素。排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素中的排序码进行比较,将它插入到有序表中的...原创 2020-02-09 14:23:54 · 84 阅读 · 0 评论 -
排序算法--快速排序
快速排序快速排序算法介绍: 快速排序是对冒泡排序的一种改进。基本思想是: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。思路图解:代码展示:package 递归;import java.util.Arrays;publi...原创 2020-02-09 13:19:25 · 154 阅读 · 1 评论 -
分治算法--汉诺塔问题
分治算法分治法在每一层递归上都有三个步骤: 1)分解:将原问题分解为若干个规模较小的,相互独立的,与原问题形式相同的子问题。 2)解决:若子问题规模较小而容易被解决则直接解决,否则递归地解各个子问题 3)合并:将各个子问题的解合并为原问题的解分治算法解决汉诺塔问题:1) 如果是有一个盘,直接从A移动到C(A–>C),如果我们有n>=2的这种情况,我们总是可以看做是两个...原创 2020-02-09 11:29:23 · 288 阅读 · 0 评论 -
选择排序--优化
选择排序选择排序(Selection sort)是一种简单直观的排序算法选择排序的原理: 第一次从待排序的数据中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。注:选择排序是不稳定的排序方法。冒泡排序算法的过程:一个数组(将数组从小到大排序): 第一轮:3...原创 2020-02-01 10:53:39 · 195 阅读 · 0 评论 -
排序算法--冒泡排序
冒泡排序冒泡排序是一种最基础的交换排序冒泡排序算法的原理: 1、对相邻的数进行比较,根据从小到大交换位置。 2、从第一对元素开始到最后一对元素做同样的工作,最后一个数应是最大的数。 3、针对所有的元素重复上面的步骤,除了最后一个元素,因为每次下来最后一个数都将是最大的数。 4、持续比较,直到没有元素需要比较。冒泡排序算法的过程: 有一组数: 首先...原创 2020-01-30 22:26:00 · 101 阅读 · 0 评论 -
二叉树删除指定节点
二叉树删除节点:要求:如果删除的节点是叶子结点,则删除该结点。如果删除的节点是非叶子结点,则删除该子树。思路:首先处理根节点:如果树是空树,原创 2020-12-04 11:06:42 · 3424 阅读 · 2 评论 -
二叉树--前序、中序、后序查询指定的节点
前序查找:思路分析:先判断当前结点的no是否等于查找的,如果是相等,则返回当前结点。如果不等,则判断当前结点的左子结点是否为空,如果不为空,则递归前序查找。左递归前序查找,找到结点则返回否则继续判断,当前结点的右子结点是否为空,如果不空,则继续向右递归前序查找。//定义一个二叉树public class binaryTreeDemo { public static void main(String[] args) { //先创建一个二叉树 BinaryTree binaryTree原创 2020-12-03 20:33:32 · 237 阅读 · 0 评论 -
二叉树--前序、中序、后序遍历
一、二叉树:树的种类很多,每个结点最多只能有两个子结点的一种形式成为二叉树。二叉树的子结点分为左结点和右结点。图示:二、前序遍历:分析:前序遍历先输出当前结点(初始的时候是根结点) 。如果左子结点不为空则递归继续前序遍历。如果右子结点不为空则递归继续前序遍历。public class binaryTreeDemo{ public static void main(String[] args) { //先创建一个二叉树 BinaryTree binaryTree = new B原创 2020-12-03 17:10:57 · 105 阅读 · 0 评论 -
栈的介绍和应用--用数组模拟栈
一、基本介绍:栈是一个先入后出的有序列表栈中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表,允许插入和删除的一端为变化的一段,称为栈顶。最先放入栈中的元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。二、示意图:三、栈的应用场景:子程序的调用,在跳往子程序前,会先将下个指令的地址存在堆栈中,直到子程序执行完成后再将地址取出,以回到原来的程序中。处理递归调用:和子程序的调用类似,只是除了存储下一个指令的地址处也将参数、区域、原创 2020-05-13 17:38:34 · 252 阅读 · 0 评论 -
单向链表--增加、删除、修改、遍历功能
1、链表介绍:链表是以节点的方式来存储,是链式存储的每个节点包含data域、next域(指向下一个节点)每个节点不一定是链式存储的链表分带头结点和不带头节点链表不是连续存储的内存中:逻辑上:2、代码展示:package LinkedList;public class singleLinkedList { public static void main(String[...原创 2020-05-05 23:04:58 · 333 阅读 · 0 评论 -
双向链表--增加、删除、修改、遍历功能
1、单向链表的缺点:单向链表查找的方向只能是一个方向,而双向链表可以向前或向后查找。单向链表不能自我删除,需要靠辅助节点,而双向链表则可以自我删除。注:双向链表的next域指向下一个节点,下一节点的pre指向上一个节点。(如图:)2、分析双向链表增加、删除、修改、遍历功能思路以一个添加人物名字和昵称为例1)遍历:判断链表是否为空将头节点赋值给一个变量,因为头节点不能改变。...原创 2020-05-05 22:18:19 · 1374 阅读 · 0 评论 -
队列--数组模拟环形队列
思路如下:front变量的含义做一个调整:front就指向队列的第一个元素,也就是说arr[front]就是队列的第一个元素,front的初始值为0。rear变量的含义做一个调整:rear指向队列的最有一个元素的后一个位置,因为希望空出一个空间作为约定,rear的初始值为0。当队列满时,条件是(rear+1)%maxsize=front。队列为空的条件是:front==rear。队列中...原创 2020-05-03 09:00:56 · 109 阅读 · 0 评论 -
队列--数组模拟
基本介绍:1、队列是一个有序列表,可以用数组或是链表来实现。2、遵循先进先出的原则,既先存入队列的数据要先取出,后存入的要后取出。数组模拟:1、队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下:注:输入数据时front不变只有rear值往后移,输出数据时front值后移rear值不变。实例应用:当我们将数据存入队列时称为"addQueue",addQueu...原创 2020-05-01 22:35:07 · 137 阅读 · 0 评论 -
稀疏数组
基本介绍:当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。处理方法:1、记录数组一共有几行几列,有多少个不同的值。2、把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。案例:稀疏数组中:第一行11、11、2分别代表原二维数组中有11行11列2个不为0的值第二行1、2、1代表原二位数组中第一行第二列的不为零的值是1...原创 2020-05-01 14:59:38 · 111 阅读 · 0 评论