
数据结构与算法
文章平均质量分 69
秋叶夏风
在这里探讨Python,Go,前端相关技术,分享一些个人总结的经验和学习中遇到的各种坑 o~(▔▽▔o~)
展开
-
哈希表思路图解和代码实现
原文链接传送门哈希表(散列)-Google上机题看一个实际需求,google公司的一个上机题:有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址…),当输入该员工的id时,要求查找到该员工的 所有信息.要求: 不使用数据库,尽量节省内存,速度越快越好=>哈希表(散列)散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散原创 2021-03-05 09:17:51 · 908 阅读 · 2 评论 -
排序算法介绍和分类
原文链接:传送门排序算法的介绍排序也成排序算法排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。 排序的分类: 1) 内部排序: 指将需要处理的所有数据都加载到**内部存储器(内存)**中进行排序。 2) 外部排序法: 数据量过大,无法全部加载到内存中,需要借助外部存储进行 排序。 3) 常见的排序算法分类(见右图):排序的分类,这个地方,就敲黑板了算法的时间复杂度度量一个程序(算法)执行时间的两种方法事后统计的方法这种方法可行, 但原创 2021-03-04 16:30:18 · 625 阅读 · 1 评论 -
迷宫回溯问题分析和实现
原文链接:传送门迷宫问题说明:小球得到的路径,和程序员设置的找路策略有关即:找路的上下左右的顺序相关再得到小球路径时,可以先使用(下右上左),再改成(上右下左),看看路径是不是有变化测试回溯现象思考: 如何求出最短路径? //下面代码的找路策略是:下右上左public static boolean setWay(int[][] map, int i, int j) { if (map[6][5] == 2) { // 表示路已经找到了 return true;原创 2021-03-04 16:28:52 · 393 阅读 · 1 评论 -
八皇后问题分析与Java实现
原文链接:传送门八皇后问题八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 八皇后问题算法思路分析第一个皇后先放第一行第一列第二个皇后放在第二行第一列、然后判断是否OK, 如果不OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适继续第三个皇后,还是第一列、第二列……直到第8个皇后也能放在一个不冲原创 2021-03-04 16:27:27 · 872 阅读 · 1 评论 -
递归应用场景和调用机制
原文链接:传送门递归迷宫问题(回溯)概念简单呐的说: 递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时让代码变得简洁.案例-递归调用机制打印问题public static void test(int n){ if(n>2){ test(n-1); } System.out.println("n="+n);}递归调用规则:当程序执行到一个方法时,就会开辟一个独立的空间(栈) 阶乘问原创 2021-03-04 16:25:43 · 448 阅读 · 1 评论 -
前缀中缀后缀表达式的计算求值
原文在这里表达式前缀表达式(波兰表达式)前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前举例说明: (3+4)×5-6 对应的前缀表达式就是 - × + 3 4 5 6前缀表达式求值前缀表达式的计算机求值从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 和 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果例如: (3+4)×5-6 对应的前缀表达式就是 - × + 3 4 5原创 2021-03-04 16:22:23 · 2477 阅读 · 1 评论 -
使用栈来完成一个表达式的结果
原文地址:传送门使用栈来完成一个表达式的结果使用栈完成计算 一个表达式的结果7*2*2-5+1-5+3-4 = ?3+2*6-2[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XzPnJzRe-1614845779689)(https://victorfengming.gitee.io/data_algorithm/img/QQ%E6%88%AA%E5%9B%BE20210220134231.png)]使用栈完成表达式的计算 思路通过一个 index 值(索原创 2021-03-04 16:17:56 · 381 阅读 · 1 评论 -
数据结构之栈
原文地址:传送门栈栈的一个实际需求请输入一个表达式 计算式:[7*2*2-5+1-5+3-3] 点击计算【如下图】请问: 计算机底层是如何运算得到结果的? 注意不是简单的把算式列出运算,因为我们看这个算式 7 2 2 - 5, 但是计算机怎么理解这个算式的(对计算机而言,它接收到的就是一个字符串),我们讨论的是这个问题。-> 栈栈的介绍栈的英文为(stack)栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只原创 2021-03-04 16:15:06 · 271 阅读 · 1 评论 -
链表(Linked List)之环形链表
原文地址:传送门单向环形链表应用场景Josephu(约瑟夫、约瑟夫环) 问题Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。提示:用一个不带头结点的循环链表来处理Josephu 问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被删除结点原创 2021-03-04 16:13:21 · 688 阅读 · 1 评论 -
链表(Linked List)之双向链表
双向链表应用实例使用带head头的双向链表实现 –水浒英雄排行榜管理单向链表的缺点分析:单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。单向链表不能自我删除,需要靠辅助节点 ,而双向链表,则可以自我删除,所以前面我们单链表删除时节点,总是找到temp,temp是待删除节点的前一个节点(认真体会).示意图帮助理解删除课堂作业和思路提示:双向链表的第二种添加方式,按照编号顺序 [示意图] 按照单链表的顺序添加,稍作修改即可.分析 双向链表的遍历,添加,修改,删原创 2021-03-04 16:11:29 · 506 阅读 · 1 评论 -
链表(Linked List)之单链表
链表(Linked List)介绍链表是有序的列表,但是它在内存中是存储如下小结:链表是以节点的方式来存储,是链式存储每个节点包含 data 域, next 域:指向下一个节点.如图:发现链表的各个节点不一定是连续存储.链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定结合一个实际的工作案例, 说明链表的实用价值单链表单链表(带头结点) 逻辑结构示意图如下单链表的应用实例使用带head头的单向链表实现 –水浒英雄排行榜管理 完成对英雄人物的增删改查操作, 注: 删除原创 2021-03-04 16:06:57 · 368 阅读 · 2 评论