数据结构
Reanon
这个作者很懒,什么都没留下…
展开
-
JAVA数据结构:时间复杂度分析
算法的时间复杂度度量一个程序(算法)执行时间的两种方法:事后统计的方法:这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素, 这种方式,要在同一台计算机的相同状态下运行,才能比较那个算法速度更快。事前估算的方法:通过分析某个算法的时间复杂度来判断哪个算法更优.时间频度T(n)T(n)T(n)一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法原创 2020-09-08 11:52:33 · 697 阅读 · 0 评论 -
JAVA数据结构:递归(八皇后问题)
递归:八皇后问题(回溯算法)八皇后问题介绍八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法(92种)。八皇后问题算法思路分析第一个皇后先放第一行第一列第二个皇后放在第二行第一列,然后判断是否OK如果不OK,继续放在第二列、第三列、依次把所有列都放完找到一个合适继续第三个皇后,还是第一列、第二列……直原创 2020-09-08 09:47:59 · 178 阅读 · 0 评论 -
JAVA数据结构:递归(迷宫问题)
递归(Recursion)递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。递归调用机制当程序执行一个方法时,就会开辟一个独立的空间(栈)每个空间的数据(局部变量),是独立的。打印问题/** * 打印问题 * * @param n */ public static void test(int n) { if (n > 2) { test(n - 1原创 2020-09-08 09:47:00 · 533 阅读 · 0 评论 -
JAVA数据结构:栈实现中缀表达式转化为后缀表达式
中缀表达式转化为后缀表达式IDEA自动补全类声明:ctrl+Alt+V后缀表达式适合计算式进行运算,但是人却不太容易写出来,尤其是表达式很长的情况下,因此在开发中,我们需要将中缀表达式转成后缀表达式。具体步骤如下:初始化两个栈:运算符栈s1和储存中间结果的栈s2;从左至右扫描中缀表达式;遇到操作数时,将其压s2;遇到运算符时,比较其与s1栈顶运算符的优先级:如果s1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈;否则,若优先级比栈顶运算符的高,也将运算符压入s1;否则,将s1原创 2020-09-07 12:11:06 · 892 阅读 · 0 评论 -
JAVA数据结构:后缀表达式综合计算
前缀、中缀、后缀表达式(逆波兰表达式)前缀表达式(波兰表达式)前缀表达式又称波兰式,前缀表达式的运算符位于操作数之前从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素 和 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果例如: 中缀表达式(3+4)×5-6 对应的前缀表达式就是 - × + 3 4 5 6, 针对前缀表达式求值步骤如下:从右至左扫描,将6、5、4、3压入堆栈遇到+运算原创 2020-09-07 12:10:00 · 1374 阅读 · 0 评论 -
JAVA数据结构:栈实现中缀表达式计算
栈实现综合计算器栈完成表达式的计算思路通过一个index值(索引),来遍历我们的表达式如果我们发现是一个数字,就直接入数栈如果发现扫描到是一个符号,就分如下情况如果发现当前的符号栈为空,就直接入栈如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,在从符号栈中pop出一个符号,进行运算,将得到结果,入数栈,然后将当前的操作符入符号栈如果当前的操作符的优先级大于栈中的操作符,就直接入符号栈.当表达式扫描完毕,就顺序的从原创 2020-09-06 16:03:20 · 410 阅读 · 0 评论 -
JAVA数据结构:栈基础入门
栈(stack)栈的介绍栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除出栈(pop)和入栈(push)的概念入栈出栈栈的应用场景子程原创 2020-09-06 16:02:15 · 186 阅读 · 0 评论 -
JAVA数据结构:单向环形链表(Josephu问题)
单向环形链表CircleSingleLinkedListJosephu(约瑟夫、约瑟夫环问题)Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到 所有人出列为止,由此产生一个出队编号的序列。提示:用一个不带头结点的循环链表来处理Josephu 问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然原创 2020-09-03 09:27:49 · 229 阅读 · 0 评论 -
JAVA数据结构:双向链表
双向链表1)单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。2)单向链表不能自我删除,需要靠辅助节点 ,而双向链表,则可以自我删除,所以前面我们单链表删除时节点,总是找到temp,temp是待删除节点的前一个节点(认真体会).双向链表的节点区别于单向链表节点,多了一个 pre/** * 双向节点:水浒英雄节点 */class HeroNode2 { public int number; public String name; public Stri原创 2020-09-02 16:23:00 · 340 阅读 · 0 评论 -
JAVA数据结构:单链表常见题目
常见题目1.求单链表中有效节点的个数getLength方法 /** * 统计单链表的节点的个数(不计算头节点) * * @param head 链表的头节点 * @return 有效节点的个数 */ public static int getLength(HeroNode head) { //空链表则返回长度为0 if (head.next == null) { return 0;原创 2020-09-02 14:47:11 · 306 阅读 · 0 评论 -
JAVA数据结构:单向链表(Linked List)
单向链表(Linked List)链表是有序的列表,但是它在内存中是存储如下:链表是以节点的方式来存储,是链式存储每个节点包含 data 域, next 域:指向下一个节点.如图:发现链表的各个节点不一定是连续存储.链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定单链表(带头结点) 逻辑结构示意图如下使用带head头的单向链表实现完成对英雄人物的删除、修改和查找定义节点定义一个节点HeroNode.java/** * 节点:水浒英雄节点 */c原创 2020-09-01 19:57:04 · 522 阅读 · 0 评论 -
JAVA数据结构:队列
队列队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出数组模拟队列示意图:(使用数组模拟队列示意图)队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量front及rear分别记录队列前后端的下标,front 会随着数据输出而改变,而 rear则是随着数据输入而改变,如图所示:数据队列设计思路这里是原创 2020-09-01 19:53:54 · 247 阅读 · 0 评论 -
JAVA数据结构:稀疏数组
稀疏数组实现存储棋盘当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模将二维数组转化为稀疏数组/** * FileName: SparseArray * Description:稀硫数组与二维数组的相互转换 * * @create: 2020/9/1 9:41 * @author Reanon * @versio原创 2020-09-01 19:53:12 · 220 阅读 · 0 评论