![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
顾彼
每个人都是一颗星星,所以我们都要努力闪闪发光
展开
-
括号匹配
使用栈完成括号的匹配思路要判断括号的有效性,左括号必须和右括号相对应。如果是有效括号,并且他们中间还有括号,那么他们必须也是有效的,所以最简单的一种方式就是使用栈来解决。我们遍历字符串中的所有字符1,如果遇到了左括号,就把对应的右括号压栈(比如遇到了字符’(’,就把字符’)'压栈)。2,如果遇到了右括号1)查看栈是否为空,如果为空,说明不能构成有效的括号,直接返回false。2)如果栈不为空,栈顶元素出栈,然后判断出栈的这个元素是否等于这个右括号,如果不等于,说明不匹配,直接返回false。如原创 2021-01-17 23:50:02 · 85 阅读 · 0 评论 -
希尔排序1
希尔排序1.希尔排序法基本思想希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止2.希尔排序法的示意图希尔排序的逐步分析和总体实现代码package sort;import java.util.Arrays;/** * @ClassName: shellSort * @Description: 希尔排序 * @Date: 2020 年 10月 28 20:24 * @V原创 2020-10-29 01:14:48 · 168 阅读 · 0 评论 -
冒泡排序
冒泡排序小结上面的图解过程:(1) 一共进行 数组的大小-1 次 大的循环(2)每一趟排序的次数在逐渐的减少(3) 如果我们发现在某趟排序中,没有发生一次交换, 可以提前结束冒泡排序。这个就是优化package sort;import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Date;import java.util.logging.SimpleFormatter;/** * @Clas原创 2020-10-26 00:44:04 · 184 阅读 · 0 评论 -
java实现栈+栈的应用( 括号匹配算法常用思路)
栈实现后缀表达式求值思路分析我们完成一个逆波兰计算器,要求完成如下任务:输入一个逆波兰表达式(后缀表达式),使用栈(Stack), 计算其结果支持小括号和多位数整数,因为这里我们主要讲的是数据结构,因此计算器进行简化,只支持对整数的计算。思路分析例如: (3+4)×5-6 对应的后缀表达式就是 3 4 + 5 × 6 - , 针对后缀表达式求值步骤如下:1.从左至右扫描,将 3 和 4 压入堆栈;2.遇到+运算符,因此弹出 4 和 3(4 为栈顶元素,3 为次顶元素),计算出 3+4 的值原创 2020-10-22 16:40:17 · 368 阅读 · 0 评论 -
java栈的实现及应用
栈实现表达式求值思路分析使用找完成表达式的计算思路1.通过一个index值(索引) ,来遍历我们的表达式2.如果我们发现是一个数字,就直接入数栈3.如果发现扫描到是一个符号, 就分如下情况3.1如果发现当前的符号栈为空,就直接入栈3.2如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于核中的操作符,就需要从数栈中pop出两个数在从符号栈中pop出一个符号,进行运算,将得到结果,入数栈,然后将当前的操作符入符号栈,如果当前的操作符的优先级大于栈中的操作符,就直接入符号栈4.原创 2020-10-22 16:37:29 · 210 阅读 · 0 评论 -
java使用链表模拟栈
链表容易报空指针异常的数据结构,但是它也有自己的好处,这里面不用判断栈是否已满,因为相对于数组来讲,链表是一种动态的存储方法,只需要在输出的时候判断是否为空即可.package Stack;/** * @ClassName: ListStackDemo * @Description: * @Author: 李峰 * @Date: 2020 年 10月 20 0:08 * @Version 1.0 */public class ListStackDemo { public s..原创 2020-10-20 00:42:32 · 577 阅读 · 1 评论 -
java是使用数组模拟栈
栈的介绍栈的英文为(stack)栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除图解方式说明出栈(pop)和入栈(push)的概念栈的应用场景原创 2020-10-20 00:05:04 · 103 阅读 · 0 评论 -
单向循环链表解决(详细思路+图解)约瑟夫问题
Josephu 问题Josephu 问题为:设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数到m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。提示用一个不带头结点的循环链表来处理 Josephu 问题:先构成一个有 n 个结点的单循环链表,然后由 k 结点起从 1 开始计数,计到 m 时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从.原创 2020-10-16 00:51:40 · 1073 阅读 · 0 评论 -
java双链表的实现+模拟水浒英雄排行
用双链表实现对水浒英雄的管理package List.DoubleLinked;public class DoubleLinkedListDemo { public static void main(String[] args) { HeroNode heroNode1 = new HeroNode(1, "宋江", "及时雨"); HeroNode heroNode2 = new HeroNode(2, "吴用", "智多星"); HeroNod原创 2020-10-15 13:49:12 · 132 阅读 · 0 评论 -
java单链表实现+模拟水浒英雄排名
直接上代码,手撕单链表package List;/*使用带 head 头的单向链表实现 –水浒英雄排行榜管理完成对英雄人物的增删改查操作, 注: 删除和修改,查找可以考虑学员独立完成,也可带学员完成1) 第一种方法在添加英雄时,直接添加到链表的尾部2)第二种方式在添加英雄时,根据排名将英雄插入到指定位置(如果有这个排名,则添加失败,并给出提示)*/import java.util.Stack;import static List.SingleLinkedList.reverse;/**原创 2020-10-14 20:00:49 · 429 阅读 · 0 评论 -
数组模拟队列的实现过程
package queue;/** * @ClassName: ArrayQueue * @Description: * @Author: 李峰 * @Date: 2020 年 10月 11 10:10 * @Version 1.0 */public class ArrayQueueDemo { public static void main(String[] args) { ArrayQueue arrayQueue = new ArrayQueue(3); .原创 2020-10-11 12:20:08 · 70 阅读 · 0 评论