
数据结构
新花样
这个作者很懒,什么都没留下…
展开
-
逆波兰计算器
逆波兰表达式计算public class PolandNotation {public static void main(String[] args) {//逆波兰表达式//(3+4)*5-6 -》 3 4 + 5 * 6 -//为了方便,逆波兰表达式的数字和符号使用空格隔开String suffixExpression=“3 4 + 5 * 6 -”;//1.先将“3 4 + 5 * 6 -”放到ArrayList中//2.将ArrayList传递给一个方法,遍历ArrayList配合栈完原创 2020-12-04 15:58:48 · 118 阅读 · 0 评论 -
数组模拟栈并实现加减乘除运算
数组模拟栈并实现加减乘除运算1.通过一个index值,来遍历我们的表达式2.如果我们发现是一个数字,就直接入数栈3.如果发现扫描到是一个符号,分如下情况3.1如果发现当前符号栈为空,就直接入栈3.2如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,再从符号栈中pop出一个符号,进行运算,将得到的结果,入数栈,然后将当前的操作符入符号栈。如果当前的操作符的优先级大于或者等于栈中的操作符,就直接入符号栈4.当表达式扫描完毕,就顺序的从数栈原创 2020-12-04 15:31:23 · 396 阅读 · 0 评论 -
Josephus(单项环形链表解决约瑟夫、约瑟夫问题)
Josephus(约瑟夫、约瑟夫问题) 问题来历:据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个原创 2020-11-24 19:41:27 · 420 阅读 · 2 评论 -
通过数组理解双向链表
双向链表结构图:分析双向链表的遍历,添加,修改,删除的操作思路 1)遍历和单链表一样,只是可以向前,也可以向后查找 2)添加(默认添加到双向链表的最后) (1)先找到双向链表的最后这个节点(temp为辅助指针) (2)temp.next=newHeroNode (3) newHeroNode.pre=temp 3)修改思路的原理和单向链表一样 4)删除 (1)因为是双向链表,因此,我们可以实现自我删除这个节点 (2)直接找到要删除的这个节点,比如temp原创 2020-11-24 18:49:03 · 308 阅读 · 0 评论 -
通过数组模拟环形队列:
数组模拟环形队列: 思路: 1.front变量的含义:front就指向队列的第一个元素,也就是说arr[front]就是队列的第一个元素。front的初始值=0 2.rear变量的含义:rear指向队列的最后一个元素的后一个位置,因为空出一个空间作为预定。rear的初始值=0 3.当队列满时,条件是(rear+1)%maxSize==front 4.当队列为空的条件,rear==front 5.队列中有效的数据的古树(rear+maxSize-front)%m原创 2020-11-16 18:39:25 · 133 阅读 · 0 评论 -
通过数组理解链表
数组模拟链表此文章是通过数组来实现链表,主要帮助理解链表这一结构,若文中有错误之处,望指出,谢谢。一、链表(Linked List) 有序1的列表,内存存储如下:头指针地址Data域Next域150110a2170120a4160130140a6null150a1110160a5140170a3120如图总结:(1)链表是以节点的方式来存储,是链式存储。(2)每个节点包含data域,ne原创 2020-11-16 18:19:52 · 237 阅读 · 4 评论