随笔分类 -  数据结构与算法

摘要:选择排序详解 思路分析 选择排序,即选择数组中最小或者最大的数(取决于你要顺序排列还是降序排列)和数组中最前边的元素交换位置 第一次循环将最小的元素放置到数组的最前边,及最小元素和第一个元素交换位置,第二次循环将倒数第二小的元素放置到数组第二个位置,及倒数第二小元素和第二个元素交换位置,以此类推 则 阅读全文
posted @ 2021-05-30 22:22 mx_info 阅读(170) 评论(0) 推荐(0)
摘要:冒泡排序详解 思路分析 冒泡排序是使用频率较高的一种排序算法 每一次循环都将最大的数向后移动,第一次循环将最大的数移动到最后的位置,第二次循环将倒数第二大的数移动到倒数第二的位置,依次类推 外层循环 len - 1次,每次将最大的数向后移动 内层循环 len - 1 - i 次,每次比较当前数和后一 阅读全文
posted @ 2021-05-30 21:11 mx_info 阅读(176) 评论(0) 推荐(0)
摘要:递归回溯之八皇后问题详解 说明 八皇后问题是指在 8 * 8的国际象棋棋盘上每一行放置一个皇后,要保证每一行每一列不能有重复,并且对角线也不能有重复,问总共有多少种摆法 可以使用 回溯 + 递归 的思路 每一个皇后的摆放每次都遍历 每一行的这八个位置,判断每一个位置是否可以摆一个皇后 如果可以摆放, 阅读全文
posted @ 2021-05-29 21:42 mx_info 阅读(253) 评论(0) 推荐(0)
摘要:递归回溯之迷宫问题详解 说明 迷宫问题:即设置一个入口,然后按照指定的策略寻找出口 使用二维数组模拟迷宫,设定 0 为可以走的点 ,设定 1 为迷宫的墙体,即不能走,设定 2 为可以走并且已经走过的点,设定 3 为走过但不能走通 然后设定不同的策略,可以设定先下再右再上再左,也可以设定其他策略,每一 阅读全文
posted @ 2021-05-29 17:58 mx_info 阅读(119) 评论(0) 推荐(0)
摘要:使用栈模拟完整版计算器 说明 此计算器可以计算常用的 + - * / ( ) ,但没有考虑小数点 若想实现小数的计算,可自行实现 思路分析: 将中缀表达式各元素先存储到集合 然后将中缀表达式转换为后缀表达式 进行后缀表达式的计算 源码及分析 package algorithm.stack_; imp 阅读全文
posted @ 2021-05-29 11:25 mx_info 阅读(105) 评论(0) 推荐(0)
摘要:中缀表达式转后缀表达式详解 思路分析 中缀表达式即支持运算的表达式,而方法计算式计算的则是后缀表达式,因此有必要将中缀表达式转换为后缀表达式 先将中缀表达式的各项拆分,然后存储到集合中,因为集合方便存和取以及遍历的特点 然后遍历集合中各元素,按照指定的规则,将各元素转换为后缀表达式 详解见下源码 源 阅读全文
posted @ 2021-05-29 10:55 mx_info 阅读(359) 评论(0) 推荐(0)
摘要:后缀表达式模拟逆波兰计算器详解 思路分析 先将一个表达式,即要计算的式子,也就是中缀表达式,转换为后缀表达式,每一个字符中间用空格隔开,方便字符串的分割 将后缀表达式按照空格分割后存储到集合中,集合很方便遍历、存和取 定义堆栈用来辅助计算 然后遍历集合,如果取到的是数字,则直接入栈,如果取到的是运算 阅读全文
posted @ 2021-05-28 21:14 mx_info 阅读(72) 评论(0) 推荐(0)
摘要:使用栈模拟简单计算器详解 1.思路分析 基于栈先进后出的特性,用来模拟一个简单计算器,进行多位数表达式加减乘除的运算 定义两个栈,一个栈用来存储数字,一个栈用来存储运算符 总体思路:将优先级高的运算符存储在符号栈栈顶,优先级低的运算符存储在符号栈的栈底 如果表达式中的字符是数字,则直接入数栈 如果是 阅读全文
posted @ 2021-05-09 11:36 mx_info 阅读(371) 评论(0) 推荐(0)
摘要:数组模拟栈详解 说明 栈基于先进后出的特性,在递归,子程序的调用,深度优先算法,二叉树的遍历等方面起着重要的作用 栈可以基于基本数据类型数组实现,也可以使用链表实现 栈的常用方法为入栈和出栈,即push()和pop() 以下详细介绍用数组模拟栈的情况 源码及分析 栈类 //定义一个类表示栈 clas 阅读全文
posted @ 2021-05-07 21:18 mx_info 阅读(186) 评论(0) 推荐(0)
摘要:环形单向链表之约瑟夫问题详解 说明: 约瑟夫环问题可以使用单向环形链表形象的模拟解决 需要构建一个单向环形链表 然后用打印并删除节点的方式模拟小孩出圈 具体逻辑思路见代码注释 源码及分析 节点类 //创建一个小孩节点 class Boy { //小孩编号 private int no; //指向下一 阅读全文
posted @ 2021-05-06 22:29 mx_info 阅读(146) 评论(0) 推荐(0)
摘要:模拟双向链表详解 说明 双向链表通过两个指针依次将各个节点连接起来 使用next指针指向后一个节点,通过pre指针指向前一个节点 可以很好的解决删除节点时找到自身节点删除的问题,单向链表在删除某个节点时需要找到这个节点的前一个节点,而双向链表则不用 每一个节点实质为内存中的一个节点实例对象,将每个实 阅读全文
posted @ 2021-05-05 21:27 mx_info 阅读(87) 评论(0) 推荐(0)
摘要:逆序打印单链表详解 思路分析 思路1: 可以先将单链表反转(上一篇博客),然后打印反转后的链表,但是单链表反转会破坏原先链表的结构,对于某些情况并不使用 思路2: 基于栈的先进后出特性,可以遍历单链表,依次将每一个节点入栈 再遍历栈,在节点出栈时,最后入栈的节点先被打印,即可实现链表的逆序打印 说明 阅读全文
posted @ 2021-05-04 21:31 mx_info 阅读(303) 评论(0) 推荐(0)
摘要:单链表反转详解 1. 获取单链表有效节点的个数 思路分析(见源码) 源码及分析 //思路分析: //简单:遍历单链表记录链表长度并返回 //获取单链表的有效节点的个数 public static int getLength(HeroNode head) { //先判断该链表是否为空 if (head 阅读全文
posted @ 2021-05-03 22:45 mx_info 阅读(172) 评论(0) 推荐(0)
摘要:模拟单链表详解 单链表说明与分析 单链表是日常使用中常见的一种数据结构 单链表由一个个节点组成,每一个节点有数据域和指针域两部分,数据域存储具体要存储的数据,而指针域则存储节点指向的下一个节点,通过指针域将节点串起来 单链表在内存中的存储不是连续的,每一个节点和另一个节点可以存储在不同的地址空间,即 阅读全文
posted @ 2021-05-02 22:43 mx_info 阅读(88) 评论(0) 推荐(0)
摘要:数组模拟环形队列 思路分析 为解决普通队列在取出元素后当前位置无法再添加元素造成的空间浪费问题,提出环形队列,可重复的使用一段空间 还是使用数组模拟环形队列,定义指针front指向队列的第一个元素,rear指向队列最后一个元素的后一个位置 环形队列涉及一些取模算法,须认真琢磨 源码及分析 //数组模 阅读全文
posted @ 2021-05-01 22:09 mx_info 阅读(125) 评论(0) 推荐(0)
摘要:数组模拟队列 思路分析 队列基于先进先出的特性,在日常使用中频率较高 队列可基于基础数据结构数组或链表模拟(本文介绍用数组模拟) 基于面向对象思想,创建一个队列抽象类,每一个实例化对象则都为一个实体队列可进行数据的各种模拟 具体分析及源码如下 模拟源码及分析 //数组模拟队列 class Array 阅读全文
posted @ 2021-05-01 11:02 mx_info 阅读(63) 评论(0) 推荐(0)
摘要:稀释数组 目的: 将一个只包含某种单一元素的二维数组稀释为一个较小的二维数组,减少占用空间 分析及源码 //模拟稀疏数组 public static void main(String[] args) { //1.创建原始二维数组 int[][] twoArr1 = new int[11][11]; 阅读全文
posted @ 2021-04-30 21:40 mx_info 阅读(68) 评论(0) 推荐(0)