算法
Debug-ya
一起debug呀
展开
-
4.1.栈 数组模拟栈
栈介绍1、栈是一个先入后出(FILO-First In Last Out)的有序列表。2、栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。3、根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除栈的应用场景1、子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程原创 2020-09-13 16:54:12 · 183 阅读 · 0 评论 -
3.2.链表 单向链表 约瑟夫问题
Josephu(约瑟夫、约瑟夫环) 问题Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。提示:用一个不带头结点的循环链表来处理Josephu 问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从1开始计数,直到最后一个原创 2020-09-13 12:00:34 · 516 阅读 · 0 评论 -
3.1.链表 单向链表 双向链表
链表介绍链表示意图小结:1、链表是以节点的方式来存储,是链式存储,这一点可以用来解决内存碎片内存不连续的问题。2、每个节点包含 data 域, next 域:指向下一个节点.3、链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定,可以单搞出一个头节点。单向链表操作ProcessOn流程图......原创 2020-09-12 23:35:27 · 246 阅读 · 0 评论 -
2.队列 数组模拟队列 数组模拟环形队列
队列队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出模拟思路1.队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量2.因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front及 rear分别记录队列前后端的下标,front 会随着数据输出而改变,而 rear则是随着数据输入而改变,如图所示入队出队操作模拟当我们将数据存入队列时称为”addQueu原创 2020-09-11 16:59:07 · 238 阅读 · 1 评论 -
1.稀疏数组
稀疏数组基本功能当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。处理方法记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模转换思路二维数组转稀疏数组遍历二维数组,得到二维数组中有效值的个数sum创建稀疏数组,有sum+1行,3列(固定)即sparseArr int[sum + 1] [3]将二维数组中的有效值存入稀疏数组中稀疏数组转二维数组先读取稀疏数组的第一行(保存二维数组的行列信原创 2020-09-11 16:36:59 · 173 阅读 · 0 评论 -
JavaCore-数组-常用算法-回型数
数组看成一个回字形,然后回字里面再包裹一个回字。。。。把每个数字的数组索引写在一旁做参考,能够帮助自己很快的找到想要位置。先给上面最外边第一条数组赋值,方向是从左到右→给第二条数组赋值,方向是从上到下↓第三条,从右到左←第四条,从下到上↑package com.atguigu.exer;/** * 数组看成一个回字形,然后回字里面再包裹一个回字。。。。把每个数字的数组索引写在一...原创 2020-04-02 09:29:10 · 253 阅读 · 0 评论 -
JavaCore-随机数-1-100-闭区间-公式
Java的Math.random() 方法产生的随机数是[0,1)找个公式把他弄成两边都是闭区间的那种。[1,6](int)(Math.random() * (6 - 1 + 1) + 1);[1,50](int)(Math.random() * (50 - 1 + 1) + 1);[0,100](int)(Math.random() * (100 - 0 + 1));Math.r...原创 2020-04-01 22:08:00 · 725 阅读 · 0 评论 -
JavaCore-数组-常用算法-快速排序-彻底搞懂快排
排序思想:还是尚硅谷康师傅讲的清楚从数列中挑出一个元素,称为"基准"(pivot),重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。递归的最底部情形,是数列...原创 2020-04-01 21:52:48 · 215 阅读 · 0 评论 -
JavaCore-数组-常用算法-二分查找
数组的二分查找前提必须为顺序存储结构;必须按关键字大小有序排列。理解将有序数组分为三个部分,分别为中间值前(中间值数之前的一组数据),中间值和中间值后(中间值之后的一组数据);将要查找的数与中间值的数相比较,等于则退出查找,小于则在中间值前进行比较,大于在在中间值后进行比较,依次递归,直至查找到对应的值为止;当要查找数据结构为偶数时,中间值mid应向下取整处理;上述arrays数...原创 2020-04-01 16:00:05 · 178 阅读 · 0 评论 -
JavaCore-数组-常用算法-冒泡排序-两次优化-彻底懂了冒泡
冒泡就是交换位置,相邻的元素比较后交换。小的往上冒大的往下沉,或者改成小的往下沉大的往上冒。 走一趟之后最大的数就沉底了。这篇文章不错,引用以下,不明白为啥发头条上去https://www.toutiao.com/a6593273307280179715/?iid=6593273307280179715比较相邻的元素,如果前一个比后一个大,交换之。第一趟排序第1个和第2个一对,比较与交...原创 2020-04-01 17:39:39 · 179 阅读 · 0 评论