![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 54
小张不会打篮球
这个作者很懒,什么都没留下…
展开
-
归并排序算法
归并排序算法 归并排序是建立在归并操作上的一种有效的排序算法,该算法采用分治算法的一种非常典型的应用。 具体是将已有的子序列合并,得到完全有序的序列;即先使每一个子序列有序,在使子序列段间有序。 若将两个有序表合成一个有序表,成为2路归并。 时间复杂度:O(nlong2n) 空间复杂度:O(n) 稳定性:稳定 动图演示 基本操作 分组 若一个数组中有N个元素,该算法会对数组进行逐层折半分组 第一层 分为两组,每组N/2个元素 第二层 分为四组,每组N/4个元素 第三层 分为八组,每组N原创 2022-02-12 00:37:20 · 180 阅读 · 0 评论 -
分治算法(汉诺塔游戏)
分治算法 分治算法就是将原问题分解成n个规模较小,并且结构与原问题相似的子问题,再去递归地解决这些子问题,然后这些子问题,然后再合并其结果,就可以得到原问题的解。 分治算法的递归实现,每一层递归都会涉及一下三个操作: 分解:将原问题分解成一系列子问题 解决:递归地求解各个子问题,若子问题足够下,则可以直接求解 合并:将子问题地结果合并成原问题 分治算法能解决的问题,一般需要满足几个条件: 原问题与分解的子问题具有相同的模式(即就是求解问题的方式一样) 原问题分解的子问题可以独立求解,子问题之间没有相关原创 2022-01-21 16:19:13 · 2402 阅读 · 0 评论 -
中缀转后缀计算
中缀表达式(10+20/2*3)/2+8,其转换成后缀表达式则为10 20 2 / 3 * + 2 / 8 + 转换过程需要用到栈,具体过程如下: 1)当遇到操作数,我们就直接将其输出。 2)当遇到操作符,则我们将其放入到栈中,遇到左括号时我们也将其放入栈中。 3)当遇到一个右括号,则将栈元素弹出,将弹出的操作符输出直到遇到左括号为止。 注意,左括号只弹出并不输出。 package Stack; import ListInterfcae_list.ArrayList; /* 中缀转后缀 */ public原创 2022-01-14 18:10:50 · 320 阅读 · 0 评论 -
栈的相关应用
中缀表达式计算器 题目要求:输入一个简单中缀表达式,计算其结果。(以"(10+40/2*3)/2+8")为例) 注意输入只能是简单的四则运算。 算法思路流程: 第一步:格式化表达式,因为在我们的表达式中会存在两位数或者三位数,当我们进行字符串分割时会导致我们得到表达式与需要计算的表达式不匹配。 private static String insertBlanks(String expression){ StringBuilder sb = new StringBuilder();原创 2022-01-10 12:45:35 · 112 阅读 · 0 评论 -
数据结构与算法
数据结构 数据间的关系 逻辑结构 是指数据元素之间的相互关系,是我们想象出来的,并没有实质性的将其存储在计算机中 线性结构:线性结构中的数据元素之间是一对一的关系 树形结构:树形结构中的数据元素之间存在一种一对多的层次关系 图形结构:图形结构的数据元素是多对多的关系 物理结构 是指数据的逻辑结构在计算机中的具体存储形式 顺序存储结构:开辟一组连续的空间存储数据通常用数组来实现,数组中空间本身是连续的,保证了数据之间的关系 链式存储结构:开辟一组随机的空间存储数据通常用节原创 2022-01-10 11:52:52 · 185 阅读 · 0 评论