java算法概述,Java数据结构与算法基础(一)概述与线性结构

Java数据结构与算法基础(二)递归算法

Java数据结构与算法基础(一)概述与线性结构

学习目的:为了能更顺畅的读很多底层API代码和拓宽解决问题的思路

一、数据结构概述

1.数据结构是什么?数据与数据之间的关系

2.数据结构的分类:

存储结构分类:顺序结构和链式结构

逻辑结构分类:线性结构(除了首位元素,其他元素都存在前一元素和后一元素)、集合结构(集合)、树形结构(树结构、文件夹、文件结构)、图形结构(多对多结构)

二、算法概述

1.算法特性:输入(0或多个输入)、输出(一个输出)、有穷性(能出结果)、确定性(一一对应)、可行性(能解决问题)

2.算法的基本要求:正确性、可读性、健壮性、时间复杂度、空间复杂度

3.没有最好的算法,只有最适合的算法

三、线性结构

1.数组的基本概念与操作

① 存储结构:顺序方式存储

② 访问方式:数组名[下标],最大下标 = arr.length-1;

③ 元素默认值 = 0,赋值:数组名[下标] = value;

2.数组创建的时候就要指定长度(即数组长度不可变)

问题:如何解决数组长度不可变?如在数组末尾添加元素

解决:① 建一个新数组,长度 = oldArr.length+1;

② 复制旧数组元素到新数组,新数组的末尾元素 = 新元素;

③ oldArr = newArr

3.数组元素的删除(先告诉我删哪个元素)

① 建一个新数组,长度 = oldArr.length-1;

② 复制旧数组元素

newArr[i] = oldArr[i]; // inewArr[i] = oldArr[i+1]; // i>n

③ oldArr = newArr;

4.面向对象的数组

属性(一个私有的数组)+方法(操作私有属性数组的方法)

要点:① 长度变化就意味着要建新数组,替代旧数组

② 传入下标的方法,首先都应该判断数组越界的问题

5.(数组)查找算法

线性查找:依次对比元素,找到相同元素即break

二分法查找:① 先排序,再查找

public static int binarySearch(int [] arr, int target){

if (arr == null) {

return -1;

}

int begin = 0;

int end = arr.length-1;

int mid = ((end - begin) >>> 1) + begin;

while(begin <= end){

if (arr[mid] == target) {

return mid;

}

if(arr[mid] > target){

end = mid-1;

}else if(arr[mid] < target){

begin = mid+1;

}

mid = ((end - begin) >>> 1) + begin;

}

return -1;

}

6.栈:先进后出

数组实现:入栈(建新数组,复制元素,新元素放到新数组最后,新数组替换对象旧数组属性)、出栈(建新数组,复制元素,取出最后一个元素,新数组替换对象中的旧数组属性,返回旧数组的最后一个元素)、查看栈元素(不涉及数组长度变化,所以直接返回旧数组的索引对应的值即可)

7.队列:先进先出

数组实现:入队、出队、队列是否为空(套路:建新数组主要涉及长度、复制元素、替换旧数组操作)

8.单链表:

存储形式:链式存储(存当前节点,同时存下个节点的位置[最后一个节点除外])

Java中单链表的结构:

Node:

int data;

Node next;

public Node(int data){

this.data = data;

}

涉及的操作:

通过第一个节点进行追加操作:

① 获取当前节点:Node currentNode = this;

② while(true){

获取下一个节点:Node next = currentNode.next;

如果下个节点为null,即最后一个节点:break;

否则:currentNode = next;

}

③ 追加节点到末尾:currentNode.next = node;//入参的Node

④ 返回当前节点 return this;

判断当前节点是否是最后一个节点:

判断当前节点的下一个节点是否为空即可

☆ 删除单链表的节点:取不到上个节点信息(这是问题),所以只能删除下个节点信息

① 取到下下个节点

② 将下下个节点赋值给当前节点的下个节点

显示所有节点信息:

① 打印当前节点信息

② currentNode = currentNode.next;

如果currentNode == null; break;

否则重复①~②

插入新节点:

① tempNode = currentNode.next;//作为下下个节点

② currentNode.next = node; //node 为新节点

③ node.next = tempNode;

9.循环链表:

结构:单链表的尾节点的下个节点是头结点

LoopNode{

int data;

LoopNode next = this;//默认自身是个循环链表,下个节点为其自身,插入节点操作和单链表相同

}

10.双向循环链表:

结构:包含上个节点信息、下个节点信息、当前节点内容

DoubleNode{

DoubleNode pre = this;

DoubleNode next = this;

int data;

}

主要操作:新增节点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kmeans python自定义初始聚类中心_机器学习-KMeans聚类 K值以及初始类簇中心点的选取...

本文主要基于Anand Rajaraman和Jeffrey David Ullman合著&#xff0c;王斌翻译的《大数据-互联网大规模数据挖掘与分布式处理》一书。KMeans算法是最常用的聚类算法&#xff0c;主要思想是:在给定K值和K个初始类簇中心点的情况下&#xff0c;把每个点(亦即数据记录)分到离其最近…

java鬼剑士觉醒,DNF新觉醒装扮,男鬼剑士帅气无比!

在DNF这个游戏中&#xff0c;时装作为游戏的一大氪点&#xff0c;相信这几天的奇迹缝纫机活动也让大家了解到了时装到底多么的烧钱&#xff01;而也因为这次的活动&#xff0c;时装可以说达到了饱和状态了&#xff0c;估计短时间之内魔盒里不会再出现追忆时装了&#xff01;虽然…

Spring JDK动态代理

JDK 动态代理是通过 JDK 中的 java.lang.reflect.Proxy 类实现的。下面通过具体的案例演示 JDK 动态代理的使用。 1. 创建项目 在 MyEclipse 中创建一个名称为 spring 的 Web 项目&#xff0c;将 Spring 支持和依赖的 JAR 包复制到 Web 项目的 WEB-INF/lib 目录中&#xff0c;…

澄海哪里学机器人编程_少年学机器人编程

​当今社会&#xff0c;唯有能者居之&#xff0c;说的是有技能在手的人可以立足于职场&#xff0c;格物斯坦表示&#xff1a;现代化的教育方式有很多&#xff0c;其中有一种机器人编程教育模式&#xff0c;青少年们学好了&#xff0c;以后中考、高考核就业比同龄人更有优势了。…

Spring CGLlB动态代理

JDK 动态代理使用起来非常简单&#xff0c;但是有一定的局限性&#xff0c;这是因为 JDK 动态代理必须要实现一个或多个接口&#xff0c;如果不希望实现接口&#xff0c;则可以使用 CGLIB 代理。 CGLIB&#xff08;Code Generation Library&#xff09;是一个高性能开源的代码…

更新fielddata为true_在pytorch中停止梯度流的若干办法,避免不必要模块的参数更新...

在pytorch中停止梯度流的若干办法&#xff0c;避免不必要模块的参数更新2020/4/11 FesianXu前言在现在的深度模型软件框架中&#xff0c;如TensorFlow和PyTorch等等&#xff0c;都是实现了自动求导机制的。在深度学习中&#xff0c;有时候我们需要对某些模块的梯度流进行精确地…

php 自动切图,前端工程师技能之photoshop巧用系列扩展篇自动切图

目录[1]初始设置 [2]自动切图前面的话随着photoshop版本的不断升级&#xff0c;软件本身增加了很多新的功能&#xff0c;也为切图工作增加了很多的便利。photoshop最新的版本新增了自动切图功能&#xff0c;本文将详细介绍photoshop的这个新功能初始设置当然首先还是要进行一些…

Spring通知类型及使用ProxyFactoryBean创建AOP代理

Spring 通知类型 通知&#xff08;Advice&#xff09;其实就是对目标切入点进行增强的内容&#xff0c;Spring AOP 为通知&#xff08;Advice&#xff09;提供了 org.aopalliance.aop.Advice 接口。 Spring 通知按照在目标类方法的连接点位置&#xff0c;可以分为以下五种类型…

matlab二维谐振子,基于有限差分法求解的二维谐振子的MATLAB程序如下。哪位大神能帮我做个注明啊,完全看不懂啊,,急...

基于有限差分法求解的二维谐振子的MATLAB程序如下。哪位大神能帮我做个注明啊&#xff0c;完全看不懂啊&#xff0c;&#xff0c;急0____丿呆呆丶2017.04.15浏览20次分享举报tic clc clear L20; W20; N20; M20; hxL/(2*N); hyW/(2*M); Szeros((2*M-1)*(2*N-1)); for m1:2*M-1 D…

typescript get方法_.NET手撸绘制TypeScript类图——上篇

.NET手撸绘制TypeScript类图——上篇近年来随着交互界面的精细化&#xff0c;TypeScript越来越流行&#xff0c;前端的设计也越来复杂&#xff0c;而类图正是用简单的箭头和方块&#xff0c;反映对象与对象之间关系/依赖的好方式。许多工具都能生成C#类图&#xff0c;有些工具也…

Spring使用AspectJ开发AOP

AspectJ 是一个基于 Java 语言的 AOP 框架&#xff0c;它扩展了 Java 语言。Spring 2.0 以后&#xff0c;新增了对 AspectJ 方式的支持&#xff0c;新版本的 Spring 框架&#xff0c;建议使用 AspectJ 方式开发 AOP。 使用 AspectJ 开发 AOP 通常有两种方式&#xff1a; 基于 …

unicode解码php,PHP解码unicode编码的中文字符

问题背景&#xff1a;晚上在抓取某网站数据&#xff0c;结果在数据包中发现了这么一串编码的数据&#xff1a;"......\u65b0\u6d6a\u5fae\u535a......如何解码unicode编码的字符&#xff1f;【好使】 - PHP网站开发 - 【开源与分享】每日最新博客在置顶博客之后解决方案&a…

python协成_Python协程技术的演进

引言1.1. 存储器山存储器山是 Randal Bryant 在《深入理解计算机系统》一书中提出的概念。基于成本、效率的考量&#xff0c;计算机存储器被设计成多级金字塔结构&#xff0c;塔顶是速度最快、成本最高的 CPU 内部的寄存器(一般几 KB)与高速缓存&#xff0c;塔底是成本最低、速…

matlab特征方程的根,MATLAB 求解特征方程的根轨迹图稳定性分析

原文&#xff1a;http://tecdat.cn/?p3871根轨迹分析在下文中&#xff0c;我们提供了用于根轨迹分析的强大MATLAB命令的简要描述。读者可能想知道为什么当强大的MATLAB命令可用时&#xff0c;教师强调学习手工计算。对于给定的一组开环极点和零点&#xff0c;MATLAB立即绘制根…

python如何把一张图像的所有像素点的值都显示出来_情人节,教你用 Python 向女神表白...

点击上方 “AirPython”&#xff0c;选择 “加为星标”第一时间关注 Python 技术干货&#xff01;2020年&#xff0c;这个看起来如此浪漫的年份&#xff0c;你还是一个人吗&#xff1f;难不成我还能是一条狗&#xff1f;提醒你一下&#xff0c;后天就是 2月14日了。什么&#x…

Spring事务管理接口

Spring 的事务管理是基于 AOP 实现的&#xff0c;而 AOP 是以方法为单位的。Spring 的事务属性分别为传播行为、隔离级别、只读和超时属性&#xff0c;这些属性提供了事务应用的方法和描述策略。 在 Java EE 开发经常采用的分层模式中&#xff0c;Spring 的事务处理位于业务逻…

倒计时小工具_送你3个倒数计日的小程序,让你不再遗忘重要事

每天我们忙于工作&#xff0c;忙于生活&#xff0c;在很多重要事情&#xff0c;重要人的生日&#xff0c;以及重要有意义的日子总会在忙碌中被遗忘&#xff0c;那么这该怎么办呢&#xff1f;别紧张&#xff0c;小编为你带来3个倒数计日的小程序&#xff0c;让你不再遗忘重要事情…

Spring声明式事务管理

Spring 的事务管理有两种方式&#xff1a;一种是传统的编程式事务管理&#xff0c;即通过编写代码实现的事务管理&#xff1b;另一种是基于 AOP 技术实现的声明式事务管理。由于在实际开发中&#xff0c;编程式事务管理很少使用&#xff0c;所以我们只对 Spring 的声明式事务管…

python写算法求最短路径,Python实现迪杰斯特拉算法并生成最短路径的示例代码

def Dijkstra(network,s,d):#迪杰斯特拉算法算s-d的最短路径&#xff0c;并返回该路径和代价print("Start Dijstra Path……")path[]#s-d的最短路径nlen(network)#邻接矩阵维度&#xff0c;即节点个数fmax999w[[0 for i in range(n)]for j in range(n)]#邻接矩阵转化…

无法检查指定的位置是否位于cfs上_打印机知识普及:七大原因导致的打印机无法打印及解决方法...

打印机无法打印的原因有很多&#xff0c;如果我们遇到打印机无法打印应该首先从简单到复杂入手。首先必须排除一些最简单的问题&#xff0c;比如打印机是否正常安装。另外打印机内部是不是已经放置有墨盒以及打印纸等&#xff0c;这些基本问题必须排除&#xff0c;另外还有一个…