数据结构与算法
unique¢
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
中缀表达式转换为后缀表达式实现基本计算机功能
前缀、中缀、后缀表达式(逆波兰表达式)举例说明运算表达式:(3+4)*5-6前缀表达式:- * + 3 4 5 6(从右向左扫描)中缀表达式:(3+4)*5-6 (我们人常见的运算表达式)后缀表达式:3 4 + 5 * 6 -(从左向右扫描,与前缀表达式相反)中缀表达式转为后缀表达式的思路1)初始化两个栈:运算符栈s1和储存中间结果的栈s22)从左到右扫描中缀表达式3)遇到数字时,将其压入s24)遇到运算符时,比较其与s1栈顶运算符的优先级1.如果s1为空,或原创 2021-01-29 17:59:40 · 570 阅读 · 2 评论 -
Java实现单向环形链表
单向环形链表介绍单向环形链表就是在单向链表(没有头节点)的基础上,让链表的最后一个节点的next指向该链表的第一个节点。如下图所示用单向环形链表解决约瑟夫问题1)1.约瑟夫问题设编号为1,2,···n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依此类推,直到所有人出列为止,由此产生一个出队编号的序列。2.提示先构成一个有n个节点的环形链表,然后由k节点起从1开始计数,计到m时,对应的节点从链表原创 2021-01-28 17:26:34 · 360 阅读 · 2 评论 -
java实现双向链表的基本功能
单向链表的缺点1)单向链表,查找的方向只能是一个方向,而双向链表可以向前或向后查找2)单向链表不能自我删除,需要借助辅助变量,而双向链表可以自我删除双向链表的增删改、遍历的操作思路1)添加节点(默认添加到双向链表的最后)1.先找到双向链表的最后节点2.temp.next=newHero(temp为辅助节点)3.newHero.pre=temp2)删除节点1.直接找到要删除的这个节点,比如temp2.temp.pre.next=temp.next3.temp.next.pre=temp.原创 2021-01-23 01:04:58 · 238 阅读 · 1 评论 -
Java编写单向链表
链表(Linked List)介绍1)链表是以节点的方式来存储数据,是链式存储。2)每个节点包含data域及next域。next域:指向下一个节点。3)链表的各个节点不一定是连续存储的。4)链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定。单链表实现增删改查的思路(用水浒传英雄排行耪来说明)1)添加数据第一种方法:数据直接添加到链表的尾部;思路该链表为空链表时:1.先创建一个head头节点(不存放具体的数据),作用是表示单链表的头(head.next)。2.后面每添加一个节原创 2021-01-22 17:36:15 · 238 阅读 · 0 评论 -
队列
#队列1.队列介绍1)队列是一个有序列表,可以用数组或是链表实现。2)遵循先进先出原则。即:先存入列表的数据,先取出。后存入的后取出2.数组模拟循环队列思路1)队列的输出、输入时分别从前后两端来处理,因此需要两个变量front(队头)及rear(队尾)来实现输入及输出。2)front初始值=0;front指向队列的第一个元素。3)rear的初始值=0;rear指向队列的最后一个元素的后一个位置。因此队列的最大容量比数组的长度少1。4)队列满的条件为...原创 2021-01-21 14:25:02 · 125 阅读 · 0 评论 -
稀疏数组与二维数组的转换
#稀疏数组的应用1.基本介绍当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。2.处理方法1)记录数组一共有几行几列,有多少个不同的值2)把具有不同值的元素的行列及值记录在稀疏数组中,从而减少内存损耗。3.思路二维数组转成稀疏数组1.遍历 原始的二维数组,得到有效数据的个数sum2.根据sum就可以创建 稀疏数组 sparseArr int[sum+1][3]3.将二维数组的有效数据存入到 稀疏数组稀疏数组转原始的二维数...原创 2021-01-20 23:50:05 · 161 阅读 · 3 评论 -
基数排序
基数排序(桶排序)1)基数排序属于“分配式排序”,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用2)基数排序法属于效率高的稳定性排序法3)基数排序是桶排序的扩展4)基数排序实现:将整数按位数切割成不同的数字,然后按每个位数分别比较基数排序图文说明将数组{53,3,542,748,14,214}使用基数排序,进行升序排序代码实现不过要注意,上述代码只适合正整数的排序,如果是负数的话,就会出现下标越界异常,但通过一些优化,即对元素的正负进行判断,如果是负数,则需要绝原创 2021-02-09 18:32:31 · 135 阅读 · 1 评论 -
归并排序
归并排序法介绍归并排序就是利用归并的思想实现的排序方法。**原理:**假设初始序列含有n个元素,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2] ([x]表示不小于x的最小整数)个长度为2或1的有序子序列;再两两归并,······,如此重复,直到得到一个长度为n的有序序列为止归并排序法示意图来看一下治阶段,将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6]两个有序的子序列,合并为最终序列[1,2,3,4,5原创 2021-02-08 00:11:54 · 117 阅读 · 1 评论 -
快速排序
快速排序法介绍快速排序和冒泡排序一样都属于交换排序,通过元素之间的比较和交换位置来达到排序的目的。快速排序在每一轮中挑选一个基准元素,并让其他比它大的元素移到数列的一边,比它小的元素移到数列的另一边,从而把数列拆成两部分。每一部分在下一轮又分别拆分成两部分,直到不可再分为止,以此达到整组数据变成有序序列快速排序法示意图代码实现import java.util.Arrays;public class QuickSort { /** * 分治法(双边循环法) * @pa原创 2021-02-07 00:05:57 · 117 阅读 · 0 评论 -
希尔排序
希尔排序法介绍希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序希尔排序法基本思想将原本有大量记录数的记录进行分组。分割成若干个子序列,此时每个子序列待排序的记录个数就比较少了,然后在这些子序列内分别进行直接插入排序,当整个序列基本都有序时,再对全体记录进行一次直接插入排序希尔排序法示意图代码实现public class ShellSort { public static void main(String[] args) { i原创 2021-02-05 23:55:29 · 108 阅读 · 1 评论 -
插入排序
插入排序法思想把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素,排序过程中每次从无序表取出第一个元素,把它的排序码(值大小)依次与有序表元素的排序码进行比较,将它插入到有序表中适当的位置,使之成为新的有序表插入排序思路图代码实现import java.util.Arrays;public class InsertSort { public static void main(String[] args){ int[] arr原创 2021-02-04 22:38:12 · 101 阅读 · 0 评论 -
选择排序
选择排序思想一共有n个数据。 第一次从arr[0]~arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[1]-arr[n-1]中选取最小值,与arr[1]交换,···,第i次从arr[i-1]-arr[n-1]中选取最小值,与arr[i-1]交换,···,第n-1次从arr[n-2]-arr[n-1]中选取最小值,与arr[n-2]交换,总共通过n-1次,得到一个按从小到大排列的有序序列。选择排序思路1)选择排序一共有(数组大小-1)轮排序2)每一轮排序又是一个循环3)循环规则如下:原创 2021-02-03 22:56:59 · 91 阅读 · 1 评论 -
冒泡排序算法
基本介绍通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前面移向后面,就像水底下的气泡一样逐渐向上冒优化因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag元素判断是否进行过交换。从而减少不必要的比较。演示冒泡过程的例子原始数据:3, 2, 7, 6, 8第1次循环:(最大的跑到最右边。)2, 3, 7, 6, 8 (3和2比较,2 < 3,所以2原创 2021-01-30 23:23:20 · 128 阅读 · 2 评论 -
递归--八皇后问题
八皇后问题介绍在8x8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后不能处于同一行、同一列或同一斜线上,问有多少种摆法(92种)八皇后问题思路分析1)第一个皇后先放在第一行第一列2)第二个皇后放在第二行第一列,然后判断是否可以,如果不可以,则放在第二列、第三列、依次把所有的列都放完,找到一个合适的位置3)继续放第三个皇后,重复步骤(2)······直到第八个皇后也能放在一个不冲突的位置时,便是找到了一种方法4)当得到一种正确方法时,在栈回退到上一个栈时,就会开始回溯,即:将第一个原创 2021-01-30 00:30:43 · 204 阅读 · 0 评论
分享