随笔分类 - Java数据结构
来自B站尚硅谷,在此记录学习笔记
摘要:举例说明: 1、第一轮:按照每个元素的 个 位取出,然后将这个数放在对应的桶(数组)中;在按照这个桶的顺序,放入原来的数组中 --> 2、第二轮:按照每个元素的 十 位取出, --> 3、第三轮:按照每个元素的 百 位取出, --> 总结:从中可以看到 --> 排序的次数 等于 待排序中的最大位数的
阅读全文
摘要:从合并的示意图中可以看到,其实现思路与“合并两个有序的单链表,使之合并完后依然有序”类似。 1 import java.util.Arrays; 2 3 public class MergeSort { 4 5 public static void main(String[] args) { 6 i
阅读全文
摘要:从中可以发现:每次以哪个数为基准,哪个数就能被放置在最终拍好顺序的正确位置,示意图中是以每组数中的最后一个数作为基准的,需要指出的是:基准的选择不是确定的,也就是说,我们可以选择任意一个数作为基准,但是这个基准的选择需要遵循一定的规则(如:该组数最后一个,第一个,中间的数...) 示例程序是以每组数
阅读全文
摘要:希尔排序算法介绍: 希尔排序是希尔于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。 写入排序法的基本思想: 希尔排序十八记录按下标的一定增量分组,对每组使用直接插入算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增
阅读全文
摘要:算法介绍: 插入排序属于内部排序法,时对于待排序的元素以插入的方式找到改元素的适当位置,以达到排序的目的。【类似于生活中的斗地主游戏,每抓起一张牌按照便把改张牌按照指定的顺序插入到适当的位置】 插入排序的基本思想: 把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表
阅读全文
摘要:选择排序的思想: 选择排序(select sorting)也是一种简单的排序方法,它的基本思想是: 第一次排序从arr[0] ~ arr[n-1]中选取最小值,与arr[0]交换, 第二次排序从arr[1] ~ arr[n-1]中选取最小值,与arr[1]交换, 第三次排序从arr[2] ~ arr
阅读全文
摘要:冒泡排序的基本思想:通过对 待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的数逐渐从前移向后,就像水底下的气泡一样逐渐向上冒。 优化思想:因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来发现并没有发生元素数据所在位置的交换,就说明数据已经有序
阅读全文
摘要:说明:理论上应该使用一个二维数组表示棋盘,但是其实可以用一个一维数组表示各个皇后放置的位置 --> 如:arr[8] = {0,4,7,5,2,6,1,3},取出任一元素表示arr[i] = val,表示的就是将第i+1个皇后【i从0开始】放置在i+1行的arr[i+1]列 1 public cla
阅读全文
摘要:1 //递归 --> 迷宫问题 2 public class MazeQuestion { 3 4 public static void main(String[] args) { 5 //二维数组 6 int[][] migong = new int[8][7]; 7 //用 1 来表示墙壁 8
阅读全文
摘要:思路步骤分析: 1、初始化两个栈,运算符栈s1和储存中间结果的栈s2 2、从左至右扫描中缀表达式 3、遇到操作数时,将其压入s2 4、遇到运算符时,比较其与s1z栈顶运算符的优先级: 4.1:如果s1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈 4.2:否则,若优先级比栈顶运算符高,也将运
阅读全文
摘要:使用栈完成表达式的计算思路 1、通过一个index值(索引),来遍历我们的表达式 2、如果我们发现是数字,则直接入数栈;如果发现扫描到的是符号,就分一下集中情况: 3.1 :如果符号栈有操作符,就需要进行比较 --> 3.1.1 如果当前操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出
阅读全文
摘要:一、前缀表达式【波兰表达式】: 前缀表达式也称为波兰表达式,其特点是运算符位于操作数之前 举例说明:(3+4)*5-6 对应的前缀表达式就是:- * + 3 4 5 6 前缀表达式的计算机求值: 从右至左扫描表达式,遇到数字时,将数字压入堆栈中,遇到运算符,弹出来栈顶的2个数,用运算符对他们做相应的
阅读全文
摘要:头插法 每加入一个节点就将其加入到头节点之后,遍历则从前往后,出栈则是将头节点的指针指向下个节点对象所指向的节点,例:0 --> 1 --> 2 --> 3 变为:0 --> 2 --> 3 1 //定义数字节点类,每个数字节点对象都是一个节点 2 class NumberNode{ 3 //dat
阅读全文
摘要:栈:是一种先入后出的数据结构 栈底:栈中最下边的数据 栈顶:栈中最上边的数据 使用数组模拟栈数据结构 --> 1 //定义栈【里边使用数组模拟栈数据结构】,管理整个栈 2 class Stack{ 3 private int maxSize; //数组中能放置的最大的数据的个数 4 private
阅读全文
摘要:图形示例: 1 //定义Boy类,每一个Boy类的对象都是一个节点 2 class Boy{ 3 //定义小孩id 4 private int id; //值域 5 6 //创建构造器初始化值域 7 public Boy(int id) { 8 this.id = id; 9 } 10 11 pri
阅读全文
摘要:单链表管理的缺点: 单项链表,查找的方向只能是一个方向,而双链表可以向前或者向后查找节点 单链表不能自我删除,而要借助辅助节点进行遍历,而双链表则可以自我删除,之前用单链表删除节点时总会使用到辅助变量tmp,其实tmp就是待删除节点的前一个节点 单链表实现效果图: 删除: 1 //定义HeroNod
阅读全文
摘要:链表的物理存储结构: 特点: 链表是以节点的方式来存储数据的 每个节点包含data域,next域:指向下一个节点 链表的各个节点不一定是连续的 分类:链表分带头节点的和没有头节点的,根据实际需求来决定 案例:定义单链表实现三国英雄任务增删查改以及排序、遍历、合并等操作 1 //定义一个HeroNod
阅读全文
摘要:1 import java.util.Scanner; 2 //数组模拟队列 3 public class ArrayQueueDemo { 4 public static void main(String[] args) { 5 ArrayQueue arrayQueue = new ArrayQ
阅读全文
摘要:1 public class SpareArray { 2 public static void main(String[] args) { 3 /** 4 * 创建原始的二维数组:11 * 11 5 * 0:表示没有棋子 6 * 1:表示黑子 7 * 2:表示蓝子 8 */ 9 int chess
阅读全文