- 博客(14)
- 收藏
- 关注
原创 数据结构和算法:打卡第十四天
十四、八皇后问题 1、介绍:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、 同一列或同一斜线上,问有多少种摆法(92)。 2、思路分析 1) 第一个皇后先放第一行第一列 2) 第二个皇后放在第二行第一列、然后判断是否 OK, 如果不 OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适 3) 继续第三个皇后,还是第一列、第二列……直到第 8 个皇后也能放在一个不冲突的位置,算是 找到了一个正确解 4) 当得到一个正确解...
2021-08-09 23:06:25 319 5
原创 数据结构和算法:打卡第十三天
十三、迷宫问题 代码实现: package com.atguigu.recursion; public class MiGong { public static void main(String[] args) { int[][] map = new int[8][7]; for (int i = 0; i < 7; i++) { map[0][i] = 1; map[7][i] = 1; } for (int i = 0; i < 8; i++) {
2021-08-09 22:54:59 125
原创 数据结构和算法:打卡第十二天
十二、递归 1、应用场景:看个实际应用场景,迷宫问题(回溯) 2、概念:递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。 3、递归调用机制 1) 打印问题 2) 阶乘问题 3) 使用图解方式说明了递归的调用机制 4、代码展示 public class RecursionTest { public static void main(String[] args) { test(4); //in...
2021-08-09 22:43:32 141
原创 数据结构和算法:打卡第十一天
十一、将中缀表达式转成后缀表达式 1、具体步骤如下: 1)初始化两个栈:运算符栈s1和储存中间结果的栈s2; 2)从左至右扫描中缀表达式; 遇到操作数时,将其压s2; 3)遇到运算符时,比较其与s1栈顶运算符的优先级: a. 如果s1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈; 否则,若优先级比栈顶运算符的高,也将运算符压入s1; b. 否则,将s1栈顶的运算符弹出并压入到...
2021-08-02 23:58:47 261 3
原创 数据结构和算法:打卡第十天
十、逆波兰计算器 1、输入一个逆波兰表达式(后缀表达式),使用栈(Stack), 计算其结果 2、 支持小括号和多位数整数,因为这里我们主要讲的是数据结构,因此计算器进行简化,只支持对整数的计算。 3、思路分析 例如: (3+4)×5-6 对应的后缀表达式就是 3 4 + 5 × 6 - , 针对后缀表达式求值步骤如下: 1)从左至右扫描,将 3 和 4 压入堆栈; 2)遇到+运算符,因此弹出 4 和 3(4 为栈顶元素,3 为次顶元素),计...
2021-08-02 23:40:12 127 1
原创 数据结构和算法:打卡第九天
九、栈的三种表达式 1 、前缀表达式(波兰表达式) 1)前缀表达式的运算符位于操作数之前; 2)举例说明: (3+4)×5-6 对应的前缀表达式就是 - × + 3 4 5 6; 3)求值:从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 和 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果。 2、中缀表达式 1)中缀表达...
2021-07-31 19:24:59 137 1
原创 数据结构和算法:打卡第八天
八、栈实现综合计算器 1、问题提出 请输入一个表达式:【7*2*2-5+1-5+3-3】点击计算 2、思路分析 1)通过一个index值,来遍历表达式 2)如果发现是一个数字就直接入数栈 3)如果发现扫描到的是一个符号,就分以下三种情况: a. 如果当前符号栈为空,就直接入栈 b. 如果当前符号栈中有操作符,就进行比较: ① 如果当前的操作符的优先级小于或者等于栈中的操作符的优先级,就需要从数栈中pop出两个数,在...
2021-07-31 19:00:22 92 1
原创 数据结构和算法:打卡第七天
七、单向环形链表: 1、应用实例 Josephu(约瑟夫、约瑟夫环) 问题 Josephu 问题为:设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数 到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由 此产生一个出队编号的序列。 提示:用一个不带头结点的循环链表来处理 Josephu 问题:先构成一个有 n 个结点的单循环链表...
2021-07-29 14:54:04 122 4
原创 数据结构和算法:打卡第六天
单链表表面试题: 1、题目: 1)求单链表中有效节点个数 2)查找单链表中倒数第K个节点 3)单链表的反转 2、代码实现: 1)求单链表中有效节点个数 public static int getLength(HeroNode head){ if(head.next == null){ return 0; } int length = 0; HeroNode temp = head.next; while...
2021-07-27 21:14:27 102 1
原创 数据结构和算法:打卡第五天
五、栈 1、栈的介绍 1) 栈是一个先入后出(FILO-First In Last Out)的有序列表。 2) 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的 一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。 3) 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元 素最先删除,最先放入的元素最后删除 2、栈的应用场景 ...
2021-07-27 21:06:41 121 2
原创 数据结构和算法:打卡第四天
四、双向链表 1、双向链表的操作分析和实现 使用带 head 头的双向链表实现 –水浒英雄排行榜 2、管理单向链表的缺点分析: 单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。 单向链表不能自我删除,需要靠辅助节点 ,而双向链表,则可以自我删除 遍历 方和 单链表一样,只是可以向前,也可以向后查找 添加 (默认添加到双向链表的最后) (1) 先找到双向链表的最后这个节点 (2) temp.next = newHeroNode (3) newHeroNode.pre = temp; 修改
2021-07-25 22:40:55 184 4
原创 数据结构和算法:打卡第三天
1、链表介绍 ①链表是以节点的方式来存储,是链式存储 ②每个节点包含 data 域, next 域:指向下一个节点. ③如图:发现链表的各个节点不一定是连续存储. ④ 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定。 2、单链表的应用实例 使用带 head 头的单向链表实现水浒英雄排行榜管理完成对英雄人物的增删改查操作。 ①第一种方法在添加英雄时,直接添加到链表的尾部 ;添加(创建): a.先创建一个head头节点,作用就是表示单链表的头; b.后面我们毎添加一个节点,就直接加入到链表的最后。
2021-07-24 23:46:19 248 1
原创 数据结构和算法:打卡第二天
二、队列 1、使用场景:银行排队系统 2、队列介绍: ①队列是一个有序列表,可以通过数组或是链表来实现; ②遵循先入先出的原则,即:先存入队列的数据,要先取出,后存入的要后取出; 3、数组模拟队列思路 ①队列本身是有序列表,若使用数组的结构来存储队列的数据,应先规定队列的最大容量(maxSize); ②因为队列的输出、输入分别是从前后端来处理,因此需要两个变量front及rear分别记录队列前后端的下标,front会随着数据的输出而改变,而rear则是随着数据的输入而改变; ③将数据存入队列(addQueu
2021-07-23 07:27:00 383 12
原创 数据结构和算法:打卡第一天
数据结构与算法 一、线性结构和非线性结构 1、线性结构 ①数据元素之间存在一对一得线性关系 ②其存储结构分为顺序存储结构(顺序表)和链式存储结构(链表)。链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息。 ③线性结构常见的有:数组、队列 、链表和栈。 2、非线性结构包括:二维数组、多维数组、广义表、树结构、图结构。 二、稀疏数组(sparsearray) 1、介绍 ①何时使用:当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 ②处理方法:记录数组
2021-07-22 21:18:15 360 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人