
数据结构与算法
勉之~
遇事不怕,就怕没有解决的能力,不断提升自己,做一个勇往直前的人,Fighting!!!
展开
-
数据结构与算法之归并排序
数据结构与算法之归并排序 基本介绍 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 排序示意图 再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2,3,4,原创 2021-05-15 09:52:39 · 131 阅读 · 0 评论 -
数据结构与算法之快速排序
数据结构与算法之快速排序 基本介绍 快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 排序示意图 代码实现 package com.datastrucate.sort; import java.util.Arrays; /** * ClassName:QuickSort * Pac原创 2021-05-14 15:34:13 · 83 阅读 · 0 评论 -
数据结构与算法之希尔排序及优化
数据结构与算法之希尔排序及优化 基本介绍 希尔排序也是一种插入排序,它是简单插入,排序经过改进之后的一个更高效的版本,也称为缩小增量排序。 基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止 排序示意图 代码实现 两种方法: 插入交换法实现,低效率 插入移动法实现,优化 package com.datastrucate.sort; import java.util.Array原创 2021-05-14 14:47:36 · 124 阅读 · 0 评论 -
数据结构与算法之插入排序
数据结构与算法之插入排序 基本介绍 插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。 排序思想 插入排序(Insertion Sorting)的基本思想是:把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有 n-1 个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。总结起来就是从第二个数开始,每次右边和左边比较,右边比左原创 2021-05-13 23:17:50 · 96 阅读 · 0 评论 -
数据结构与算法之递归解决迷宫及八皇后问题
数据结构与算法之递归解决迷宫及八皇后问题 一 迷宫问题 迷宫问题描述 从左上角走到右下角,红色代表墙,白色代表可以走 思路 (1)使用二维数组构建地图map,i,j代表位置,(1,1)代表出发的地址,(6,5)代表目的地 (2)约定:数字1代表墙,2代表走通的路,3代表走过回溯走不通 (3)走路策略:下-> 右->上 -> 左或其他的策略 代码实现 package com.datastrucate.recursion; /** * ClassName:MiGong * Pack原创 2021-05-13 16:52:42 · 174 阅读 · 0 评论 -
数据结构与算法之完整逆波兰计算器
数据结构与算法之完整逆波兰计算器 源码如下: package com.datastrucate.stack; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Stack; import java.util.regex.Pattern; /** * ClassName:ReversePolishMultiCalc * Package:com.data原创 2021-05-12 17:03:44 · 115 阅读 · 0 评论 -
数据结构与算法之栈的实现及逆波兰计算器简易版
数据结构之栈的实现 栈的介绍 (1) 栈的英文为(stack) (2) 栈是一个先入后出(FILO-First In Last Out)的有序列表。 (3) 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。 (4) 根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除 (5) 图解方式说明原创 2021-05-12 16:23:45 · 294 阅读 · 0 评论 -
数据结构与算法之环形链表实现约瑟夫问题
数据结构与算法之环形链表实现约瑟夫问题 约瑟夫问题 Josephu 问题为:设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。 提示:用一个不带头结点的循环链表来处理 Josephu 问题:先构成一个有 n 个结点的单循环链表,然后由 k 结点起从 1 开始计数,计到 m 时,对应结点从链表中删除,然后再原创 2021-05-11 15:27:04 · 106 阅读 · 0 评论 -
数据结构与算法之双向链表
数据结构与算法之双向链表 有关单向链表请参考我的另一篇博文 https://blog.youkuaiyun.com/hcyxsh/article/details/114101200 1、双向链表的操作分析和实现 使用带 head 头的双向链表实现 –水浒英雄排行榜 管理单向链表的缺点分析: 单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。 单向链表不能自我删除,需要靠辅助节点 ,而双向链表,则可以自我删除,所以前面我们单链表删除时节点,总是找到 temp,temp 是待删除节点的前一个节原创 2021-02-26 17:40:53 · 93 阅读 · 1 评论 -
数据结构与算法之冒泡排序及优化
数据结构与算法之冒泡排序及优化 一 基本介绍 (1)冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较 相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。 (2)优化: 因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在 排序过程中设置一个标志 flag 判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排 序写好后,在进行) 二原创 2021-03-03 16:36:56 · 119 阅读 · 5 评论 -
数据结构与算法之选择排序
数据结构与算法之选择排序 一 基本介绍 选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。 二 选择排序分析 选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从 arr[0]~arr[n-1]中选取最小值, 与 arr[0]交换,第二次从 arr[1]~arr[n-1]中选取最小值,与 arr[1]交换,第三次从 arr[2]~arr[n-1]中选取最小值,与 arr[2] 交换,…,第 i 次从 arr[i-1原创 2021-03-03 17:57:18 · 92 阅读 · 2 评论 -
数据结构与算法之单链表
数据结构与算法之单链表 1、链表介绍 链表是有序的列表,但是它在内存中是存储如下 小结上图: 链表是以节点的方式来存储,是链式存储 每个节点包含 data 域, next 域:指向下一个节点. 如图:发现链表的各个节点不一定是连续存储. 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定 单链表(带头结点)逻辑结构示意图如下 2、单链表的应用实例 使用带 head 头的单向链表实现 –水浒英雄排行榜管理完成对英雄人物的增删改查操作, 注: 删除和修改,查找 (1) 第一种原创 2021-02-25 19:19:38 · 601 阅读 · 0 评论 -
数据结构与算法之稀疏数组与二维数组转换
数据结构与算法之稀疏数组 1、稀疏数组说明 稀疏数组:m行三列的数组。第一行数据分别为原始数组的 行数、列数、非零个数。后面的数据为原始数据的非零数的行下标、列下标和值,根据原始数组依次类推得到稀疏数组的行数。 图片说明 2、思路 二维数组 转 稀疏数组 1. 遍历 原始的二维数组,得到有效数据的个数 sum 2. 根据sum 就可以创建 稀疏数组 sparseArr int[sum + 1] [3] 3. 将二维数组的有效数据数据存入到 稀疏数组 稀原创 2021-02-24 15:35:21 · 164 阅读 · 0 评论