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数据结构与算法基础(一)概述与线性结构相关推荐

  1. vrp 节约算法 c++_数据结构和算法(Golang实现)(8.1)基础知识-前言

    基础知识 学习数据结构和算法.我们要知道一些基础的知识. 一.什么是算法 算法(英文algorithm)这个词在中文里面博大精深,表示算账的方法,也可以表示运筹帷幄的计谋等.在计算机科技里,它表示什么 ...

  2. 【自学笔记】尚硅谷数据结构与算法Chapter 1 数据结构与算法概述

    Chapter 1 数据结构与算法概述 文章目录 Chapter 1 数据结构与算法概述 1.1.1 数据结构和算法的关系 1.2.1 线性结构 1.2.2 非线性结构 尚硅谷数据结构B站学习视频地址 ...

  3. 面试季,覆盖70%-80%的面经基础题(java及安卓)-------数据结构与算法篇

    数据结构 队列 Queue 什么是队列 队列的种类 Java 集合框架中的队列 Queue Set 什么是 Set 补充:有序集合与无序集合说明 HashSet 和 TreeSet 底层数据结构 Li ...

  4. 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 ...

  5. java环形链表_数据结构和算法(四)Java实现环形链表

    1. 数据结构和算法(四)Java实现环形链表 1.1 约瑟夫问题 约瑟夫问题:公元66年,约瑟夫不情愿地参与领导了犹太同胞反抗罗马统治的起义,后来起义失败,他和一些宁死不降的起义者被困于一个山洞之中 ...

  6. python数据结构与算法知识点_数据结构和算法基础知识点(示例代码)

    数据结构和算法基础知识点 链表 1.链表是一种由节点组成的线性数据集合,每个节点通过指针指向下一个节点.它是 一种由节点组成,并能用于表示序列的数据结构. 2.单链表:每个节点仅指向下一个节点,最后一 ...

  7. 重学算法第三期|数据结构与算法001

    目录 强烈推荐一个数据结构可视化工具:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html,点击B+树即可模拟B+树的动态插入过 ...

  8. python数据结构算法优势_Python数据结构与算法(一)----- 算法效率

    一.引入 先来看一道题: 如果a+b+c=1000, 且a2+b2=c^2(a,b,c为自然数),如何求出所有a,b,c可能的组合? (1) 枚举法 import time start_time = ...

  9. 【算法】常见数据结构基本算法整理

    去年11月份听了牛客网的课,当时做了纸质的笔记整理. 现在为了以后方便查找,将问题目录整理如下. 每道题只提供解题思路,不贴源代码. 可能会稍微手写一下代码(没有在IDE上测,为了试下以后面试时手写代 ...

  10. 完全背包问题贪心算法c语言,数据结构与算法学习之路:背包问题的贪心算法和动态规划算法...

    一.背包问题描述: 有N种物品和一个重量为M的背包,第i种物品的重量是w[i],价值是p[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包重量,且价值总和最大. 二.解决方法: 1.贪心算 ...

最新文章

  1. 13JavaScript中的简单数据类型与复杂数据类型
  2. php注册树模式,php基础设计模式大全(注册树模式、工厂模式、单列模式)
  3. 双向循环链表:鸿蒙轻内核中数据的“驿站”
  4. 求一个3*3矩阵两条对角线上元素之和(每个元素只加一次) C语言
  5. 信贷ABS资产静态池与动态池里的数据分析内容都有啥
  6. hp RAID卡 命令行管理
  7. 实验3:视频播放小程序
  8. 计算机会计信息系统中凭证日期应该是,《电算化会计》期中考试试题.doc
  9. ZYNQ LWIP实现任意长度数据接收发送
  10. vue2.x和3.x中mock数据方式
  11. 互联网金融革命已让银行家们彻夜难眠
  12. 歪歪地区服务器维护,多玩歪歪语音旗下新行业挂yy服务器简要说明
  13. 【Python数据可视化(五)】创建3D可视化图表
  14. 基于单片机的超声波测距
  15. 多角度解析特斯拉电动车技术到底领先了多少?|厚势
  16. 【HiFlow】腾讯云新一代自动化助手,我用它完成了企业疫情提示(无代码)
  17. 微信通过JSSDK分享朋友圈
  18. linux get_user,linux内核中的get_user和put_user
  19. java Compiler API (java编译api)
  20. 最新全国火车列车时刻查询数据库20090309下载

热门文章

  1. Win11任务栏如何设置在顶部
  2. win8系统软件不兼容怎么办
  3. list排序(Collections.sort())
  4. android rxjava2 简书,RXJava2学习
  5. python 爬关键词,Python爬虫实战:爬取微博热搜关键词
  6. pythonweb面试常见问题_python和web框架面试题目整理(3)
  7. sqlite插入时间字段_sqlite 获取最后插入id
  8. C语言中CY位什么时候才能为1_你真的了解C语言中的整型吗?
  9. C语言入门I love China,C语言从入门到精通
  10. python如何循环使用input_python基础知识input到while循环