![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 51
痞子三分冷ゾジ
这个作者很懒,什么都没留下…
展开
-
数据结构(Java)——查找算法(二)
查找(二)斐波那契查找(黄金分割查找)也是在有序数列中进行进行查找的一种方法**斐波那契数列{1,1,2,3, 5,8,13, 21, 34, 55 }**发现斐波那契数列的两个相邻数的比例,无限接近黄金分割值0.618斐波那契(黄金分割法)原理:斐波那契查找原理与前两种相似,仅仅改变了中间结点(mid)的位置,mid不再是中间或插值得到,而是位于黄金分割点附近,即mid=low+F(k-1)-1。对F(k-1)-1的理解::F是斐波那契数列,k是斐波那契数列的第几个元素1)由斐波那契数列原创 2022-01-05 16:38:10 · 861 阅读 · 0 评论 -
数据结构(Java)——查找算法(一)
查找算法(一)线性查找public static void main(String[] args) { int arr[] = {1,8,5,4,2,3,9,7,6}; int index = seqsearch(arr,4); System.out.println(index); } public static int seqsearch(int[] arr, int value) { for (int i = 0; i < arr.length; i++) { if原创 2022-01-05 16:37:35 · 508 阅读 · 0 评论 -
数据结构(Java)——排序问题(三)
排序问题(三)归并排序归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide- and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案修补在一起,即分而治之)。其思想是:public static void main(String[] args) { int arr[] = { 8, 4, 5, 7, 1, 3, 6, 2 }; // //测试快排的执行原创 2021-12-26 16:49:50 · 351 阅读 · 0 评论 -
数据结构(Java)——排序问题(二)
排序问题(二)希尔排序法希尔排序是希尔(DonaldShell) 于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。希尔排序法基本思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止希尔排序分两种情况:交换法和移动位置法交换法:依次分组,缩小增量,比较组间相应位置的元素,进行交换public st原创 2021-12-26 16:49:11 · 85 阅读 · 0 评论 -
数据结构(Java)——排序问题(一)
排序问题(一)冒泡排序冒泡排序的基本思想是:通过对待排序列从前向后依次比较相邻的只,若逆序则交换,使大值从前移到后。小结:(1) 一共进行数组的大小-1次大的循环(2)每一趟排序的次数在逐渐的减少(3)如果我们发现在某趟排序中,没有发生一次交换,可 以提前结束冒泡排序。这个就是优化实现代码//当在某一趟中没有发生变化,那就是已经拍好了,提前结束 public static void main(String[] args) { int arr[] = {1,4,0,-3,70,-5};原创 2021-11-03 17:48:55 · 123 阅读 · 0 评论 -
数据结构(Java)——排序总述
排序算法排序的分类包括内部排序和外部排序两种时间复杂度①事后统计法——当程序运行完之后进行评测②事前估算法——通过分析时间复杂度来判断时间频度一个算法花费的时间和语句的执行次数成正比,一个算法中的语句执行次数就是时间频度可以忽略常数项和低次项和系数时间复杂度指能操作语句的重复执行次数的某个函数用O(n)=表示;**常见的算法时间复杂度由小到大依次为: O(1)<O(log2n)<O(n)<O(nlog2n)<O(n^2^)<O(n^3^)< O(n原创 2021-10-31 19:36:21 · 80 阅读 · 0 评论 -
数据结构(Java)—— 递归应用(一)--迷宫问题
递归应用(一)–迷宫问题使用场景分析思路1、使用二维数组来代替迷宫,做个事前声明map表示地图,其中数据有:为0表示该点没有走过;为1表示墙;2表示通路可以走;3表示该点已经走过,但是走不通。2、循环遍历数组设置出墙来2、指定个寻路方式如(上右下左、左右上下等)4、进行寻路方法的递归,判断相应点的情况代码实现步骤//设置地图 int[][] map = new int[8][7]; for(int i = 0; i<8; i++) { map[i][0]=1;.原创 2021-10-09 19:37:02 · 139 阅读 · 0 评论 -
数据结构(Java)——递归的基本知识
递归递归的概念递归就是自己调用自己,但是每次传入的数据是不同的,经典的例子就是阶乘。调用机制递归需要遵守的重要规则执行一个方法时,就创建-一个新的受保护的独立空间(栈空间)方法的局部变量是独立的,不会相互影响,比如n变量如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据.递归必须向退出递归的条件逼近,否则就是无限递归,出现StackOverflowError, 死龟了当一个方法执行完毕,或者遇到return, 就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕原创 2021-10-07 11:00:59 · 134 阅读 · 0 评论 -
数据结构(Java)——中缀表达式转后缀表达式
中缀表达式转后缀表达式(逆波兰表达式)表现形式将中缀表达式转化成后缀表达式的样子是这样的:1+((2+3)*4)-5 ==> 1 2 3 + 4 * + 5 -转化思路分析思路如下:1)先创建两个栈,一个放运算符S1,另一个放运算中间数 s2这里提前说一下:由于后续的操作中S2栈中的数只有PUSH,没有POP,并且最后还要倒序输出一下,就由list来代替栈2)从左到右遍历原中缀表达式3)当遇到操作数的时候就直接将他push到S2中4)当遇到运算符时分一下几种情况: ①当S1中原创 2021-10-04 16:26:27 · 521 阅读 · 0 评论 -
数据结构(Java)——逆波兰表达式
逆波兰表达式前缀、中缀、后缀表达式的规则前缀表达式前缀表达式也叫波兰表达式,他的运算符位于操作数之前。规则如下:1)从右到左扫描,将数字压入堆栈中,2)遇到运算符将栈顶元素和栈顶次元素弹出计算,3)将计算结果压入栈中,重复上述操作知道得出最后结果前缀表达式的样子—— - * + 3 4 5 6 ==>(3+4)*5-6中缀表达式中缀表达式就是我们常见的那种表达式,这种表达式方便人去理解,但是计算机不容易理解。中缀表达式的样子—— (3+4)*5-6后缀表达式后缀表达式也叫原创 2021-09-29 16:31:19 · 635 阅读 · 0 评论 -
数据结构(Java)——栈实现简单计算器
利用栈实现简单的计算器具体思路1.通过一个index值(索引),来遍历我们的表达式2.如果我们发现是一个数字,就直接入数栈3.如果发现扫描到是一个符号,就分如下情况3.1如果发现当前的符号栈为空,就直接入栈3.2如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,从符号栈中pop出一个符号,进行运算,将得到结果,入数栈,然后将当前的操作符入符号栈,如果当前的操作符的优先级大于栈中的操作符,就直接入符号栈.4.当表达式扫描完毕,就顺序的原创 2021-09-28 15:15:54 · 364 阅读 · 0 评论 -
数据结构(Java)——栈的简单应用
栈栈的定义栈就是一个先入后出的有序列表,同时,栈是限制相信列表中元素的插入和删除只能在线性表的同一端进行的一种特殊的线性表。允许插入删除的一端也就是变化的一端,叫做栈顶,另一端是固定的一端就是栈底。当加入数据时,先加在栈底,然后依次栈顶往上走,删除数据时,也是有栈顶开始向外释放数据。其中学术名词出栈(POP)、入栈(PUSH)。栈的应用场景子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。处理递归调用:和子程序的调用类似,只是除了原创 2021-09-27 20:53:58 · 247 阅读 · 0 评论 -
数据结构(Java)——约瑟夫问题
约瑟夫环问题描述Josephu问题为:设编号为1, 2, ..n的n个人围坐一圈,约定编号为k (1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。解决思路首先是创建一个没有头节点的单向链表,同时让这个链表成环,接着使用算法循环找到对应的节点进行删除具体思路如下:1、构建一个单向的环形链表思路1.先创建第一个节点,让first指向该节点,并形成环形2.后面当我们每创建一原创 2021-09-24 10:52:46 · 144 阅读 · 0 评论 -
数据结构(Java)——双向链表
双向链表管理单向链表的缺点:单向链表,查找方向只能是一个方向,二双向链表可以此案前或者先后查找单向链表不能自我删除,需要开辅助节点,二双向链表则可以自我删除,所以前边单链表删除时总要找到temp,temp时待删除节点的前一个节点双向链表的增删改查遍历思路——方法同单向链表,就是循环打印代码如下public void list() { //判断链表是否为空 if(head.next == null) { System.out.println("链表为空"); return;原创 2021-09-23 11:10:57 · 93 阅读 · 0 评论 -
数据结构(Java)——链表面试题
链表面试题一、求链表中的有效节点思路:就是将链表的相关信息进行遍历,找个数据自加代码如下 //找有效节点的个数 public static int getLength(HeroNode head) { if(head.next == null) { //空链表 return 0; } int length = 0; //定义一个辅助的变量 HeroNode cur = head.next; while(cur != null) { length++;原创 2021-09-22 20:09:30 · 135 阅读 · 0 评论 -
数据结构(Java)——链表
链表链表就是有序列表,如同C++指针,链表是用节点的方式来存储,每个节点包含data域和next域,各个节点不一定连续储存,y以下的链表是带头结点的链表实际应用——增删改查增加节点这里提前声明一下,temp是个辅助变量,因为不能改变头节点,临时储存节点数据的作用添加时(不按顺序添加时)——先遍历链表,找到最后一个节点temp.next = null;,这时将temp.next = newNode;即可代码如下private HeroNode head = new HeroNode(0,"原创 2021-09-20 20:38:00 · 102 阅读 · 0 评论 -
数据结构(Java)——队列
队列队列是一个有序列表,可以用数组或是链表来实现,遵循先入先出的原则实现思路队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明,其中maxSize 是该队列的最大容量。因为队列的输出、 输入是分别从前后端来处理,因此需要两个变量 front及rear分别记录队列前后 端的下标,front会随着数据输出而改变,而rear 则是随着数据输入而改变,当我们将 数据存入队列时称为addQueue,addQueue的处理需要有两个步骤:思路分析1)将尾指针往后移: rear+1,原创 2021-09-19 17:34:59 · 90 阅读 · 0 评论 -
数据结构(Java)——稀疏数组
数据结构和算法概述数据结构是算法的基础,程序=数据结构+算法数据结构包括线性结构和非线性结构线性结构线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系2)线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表)。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的3)链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息4)线性结构常见的有:数组、队列、链表和栈非线性结构非线性结构包括:二维数组,多原创 2021-09-18 11:06:44 · 97 阅读 · 0 评论 -
java微型项目制作步骤
java微型项目制作步骤本文中的示例以超市管理系统为例1.首先确定出最基本的对象提取出对象公共的属性方法,并将他们添加到一个单独的类中相关属性public class Goods {// 保存商品的所有信息 String goodsCodes;//商品编码 String goodsName;//商品名称 int price;//价格 int many;//数量属性的有关方法——就是get /set 方法public String getGoodsCodes() {原创 2021-03-11 10:31:45 · 156 阅读 · 0 评论