数据结构
基础
笨蛋悠米
这个作者很懒,什么都没留下…
展开
-
递归(介绍和迷宫问题和八皇后问题)
递归的概念:简单的说:递归就是方法自己调用自己,每次调用时传入不同的变量。递归有利于编程者解决复杂的问题,同时可以让代码变的简洁。递归调用规则:当程序执行到一个方法时,就会开辟一个独立的空间(栈)每个空间的数据(局部变量),是独立的递归的小Demo:Demo1:打印问题public class print { public static void main(String[] args) { test(5); //n=2,n=3,n=4,n=5 t原创 2020-08-26 23:37:44 · 133 阅读 · 0 评论 -
栈模拟计算器(中缀和后缀)和中缀转后缀表达式
中缀表达式模拟计算器:使用栈完成表达式的计算思路:1.通过一个index值(索引),来遍历我们的表达式2.如果我们发现是一个数字,就直接入数栈3.如果发现扫描到是一个符号,就分如下情况3.1如果发现当前的符号栈为空,就直接入栈3.2如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,在从符号栈中pop出一个符号,进行运算。将得到结果,入数栈,然后将当前的操作符入符号栈;如果当前的操作符的优先级大于栈中的操作符,就直接入符号栈4.当表达原创 2020-08-25 23:38:44 · 294 阅读 · 2 评论 -
数组模拟栈
栈1)栈的英文为 (stack)2)栈是一个先入后出的有序列表3)栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈项(Top),另一端为固定的一端,称为栈底( Bottom)4)根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除栈的应用场景1)子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,原创 2020-08-23 16:27:59 · 87 阅读 · 0 评论 -
单向环形链表的应用:Josephu(约瑟夫)问题的解决
Josephu(约瑟夫、约瑟夫环)问题Josephu间问题为:设编号为1,2,…n的n个人围坐一圈,约定编k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列提示:用一个不带头结点的循环链表来处理 Josephu间题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被删除结点的下ー个结点又从1开始计数,直到最后一个结点从链表中删除原创 2020-08-22 19:53:16 · 173 阅读 · 0 评论 -
单向链表及常见面试题和双向链表
单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指向列表中的下一个结点;链表是由结点构成,head指针指向第一个成为表头结点,而终止于最后一个指向NULL的指针。小结上图:(1)链表是以节点的方式存储,是链式存储(2)每个节点包含data域,next域:指向下一个节点(3)如图:发现链表的各个节点不一定是连续存储(4)链表分带头节点的原创 2020-08-19 23:52:40 · 561 阅读 · 0 评论 -
环形Queue队列
环形Queue队列为了解决数组队列无法复用的问题。采用的思路是取模:%和之前的queue相比,思路发生了改变。现在的rear:rear 指向队列的最后一个元素的后一个位置. 因为希望空出一个空间做为约定现在的front:front 就指向队列的第一个元素, 也就是说 arr[front] 就是队列的第一个元素他们的初始值我们现在也设为0。因为rear是后一个元素,front为第一个元素,所以初始值为0。之前的正常的队列,rear是当前元素,front为第一个元素的前一个元素,所以初始值为-1。原创 2020-06-13 15:07:31 · 169 阅读 · 0 评论 -
稀疏数组
稀疏数组**稀疏数组的使用原因:**如果二维数组内很多值相同,有很多没意义的数据,使用稀疏数组能够大幅度节约空间操作方法:记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模**结构说明:**第一行的三个代表几行、几列、几个非0数字。第二行以后的即是特殊元素的行、列、值例如:3 2 2 //原数组有三行两列两个非0值0 1 3 //第0行第1列值为32 1 1 //第2行第1列值为1具体的原创 2020-06-09 22:55:00 · 80 阅读 · 0 评论 -
Queue队列的用法
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。1.添加元素添加元素可以使用add()、offer()方法来添加add()方法,在queue上限时继续添加,会抛出异常。offer()方法,在queue上限时继续添加,会得到返回值false。 //暂时找不到怎么设置上限(╯▔皿▔)╯ Queue<String> queue=new Lin原创 2020-05-15 11:39:07 · 339 阅读 · 0 评论 -
Map集合原理及操作方法
Map表,是一个多行两列的表格,左侧一列是key,右边一列是value,查询的时候是根据key来查value。1.插入元素map.put(key, value);注:(1)放进去会自动的给排序。(2)Map表的key不允许重复,如果已有的key还继续存,那么返回的是被替换的value。 Map<Integer, Integer> map = new HashMap<>(); map.put(1,1); System.out.p原创 2020-05-14 18:12:21 · 506 阅读 · 0 评论