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;
}
主要操作:新增节点
java算法概述,Java数据结构与算法基础(一)概述与线性结构相关推荐
- vrp 节约算法 c++_数据结构和算法(Golang实现)(8.1)基础知识-前言
基础知识 学习数据结构和算法.我们要知道一些基础的知识. 一.什么是算法 算法(英文algorithm)这个词在中文里面博大精深,表示算账的方法,也可以表示运筹帷幄的计谋等.在计算机科技里,它表示什么 ...
- 【自学笔记】尚硅谷数据结构与算法Chapter 1 数据结构与算法概述
Chapter 1 数据结构与算法概述 文章目录 Chapter 1 数据结构与算法概述 1.1.1 数据结构和算法的关系 1.2.1 线性结构 1.2.2 非线性结构 尚硅谷数据结构B站学习视频地址 ...
- 面试季,覆盖70%-80%的面经基础题(java及安卓)-------数据结构与算法篇
数据结构 队列 Queue 什么是队列 队列的种类 Java 集合框架中的队列 Queue Set 什么是 Set 补充:有序集合与无序集合说明 HashSet 和 TreeSet 底层数据结构 Li ...
- 0302Prim算法-最小生成树-图-数据结构和算法(Java)
文章目录 1 Prim算法 1.1 概述 1.1.1 算法描述 1.1.2 数据结构 1.1.3 横切边集合维护 1.2 延时实现 1.2.1 实现代码 1.2.2 性能分析 1.3 即时实现 1.3 ...
- java环形链表_数据结构和算法(四)Java实现环形链表
1. 数据结构和算法(四)Java实现环形链表 1.1 约瑟夫问题 约瑟夫问题:公元66年,约瑟夫不情愿地参与领导了犹太同胞反抗罗马统治的起义,后来起义失败,他和一些宁死不降的起义者被困于一个山洞之中 ...
- python数据结构与算法知识点_数据结构和算法基础知识点(示例代码)
数据结构和算法基础知识点 链表 1.链表是一种由节点组成的线性数据集合,每个节点通过指针指向下一个节点.它是 一种由节点组成,并能用于表示序列的数据结构. 2.单链表:每个节点仅指向下一个节点,最后一 ...
- 重学算法第三期|数据结构与算法001
目录 强烈推荐一个数据结构可视化工具:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html,点击B+树即可模拟B+树的动态插入过 ...
- python数据结构算法优势_Python数据结构与算法(一)----- 算法效率
一.引入 先来看一道题: 如果a+b+c=1000, 且a2+b2=c^2(a,b,c为自然数),如何求出所有a,b,c可能的组合? (1) 枚举法 import time start_time = ...
- 【算法】常见数据结构基本算法整理
去年11月份听了牛客网的课,当时做了纸质的笔记整理. 现在为了以后方便查找,将问题目录整理如下. 每道题只提供解题思路,不贴源代码. 可能会稍微手写一下代码(没有在IDE上测,为了试下以后面试时手写代 ...
- 完全背包问题贪心算法c语言,数据结构与算法学习之路:背包问题的贪心算法和动态规划算法...
一.背包问题描述: 有N种物品和一个重量为M的背包,第i种物品的重量是w[i],价值是p[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包重量,且价值总和最大. 二.解决方法: 1.贪心算 ...
最新文章
- 13JavaScript中的简单数据类型与复杂数据类型
- php注册树模式,php基础设计模式大全(注册树模式、工厂模式、单列模式)
- 双向循环链表:鸿蒙轻内核中数据的“驿站”
- 求一个3*3矩阵两条对角线上元素之和(每个元素只加一次) C语言
- 信贷ABS资产静态池与动态池里的数据分析内容都有啥
- hp RAID卡 命令行管理
- 实验3:视频播放小程序
- 计算机会计信息系统中凭证日期应该是,《电算化会计》期中考试试题.doc
- ZYNQ LWIP实现任意长度数据接收发送
- vue2.x和3.x中mock数据方式
- 互联网金融革命已让银行家们彻夜难眠
- 歪歪地区服务器维护,多玩歪歪语音旗下新行业挂yy服务器简要说明
- 【Python数据可视化(五)】创建3D可视化图表
- 基于单片机的超声波测距
- 多角度解析特斯拉电动车技术到底领先了多少?|厚势
- 【HiFlow】腾讯云新一代自动化助手,我用它完成了企业疫情提示(无代码)
- 微信通过JSSDK分享朋友圈
- linux get_user,linux内核中的get_user和put_user
- java Compiler API (java编译api)
- 最新全国火车列车时刻查询数据库20090309下载
热门文章
- Win11任务栏如何设置在顶部
- win8系统软件不兼容怎么办
- list排序(Collections.sort())
- android rxjava2 简书,RXJava2学习
- python 爬关键词,Python爬虫实战:爬取微博热搜关键词
- pythonweb面试常见问题_python和web框架面试题目整理(3)
- sqlite插入时间字段_sqlite 获取最后插入id
- C语言中CY位什么时候才能为1_你真的了解C语言中的整型吗?
- C语言入门I love China,C语言从入门到精通
- python如何循环使用input_python基础知识input到while循环