一篇文章带你入门Java数据结构
目录
- 1、逻辑结构和物理结构
- 2、顺序结构,链式结构,栈,队列,二叉树
- 二叉树
- 普通二叉树:
- 满二叉树:
- 完全二叉树:
- 平衡二叉树:
- 排序二叉树:
- 二叉树的遍历:
- 总结
1、逻辑结构和物理结构
逻辑结构:
集合: 数据与数据之间没有任何关系
线性: 一对一关系
树型: 一对多关系
图型: 多对多关系
物理结构:
顺序结构(数组):
链式结构(链表):
2、顺序结构,链式结构,栈,队列,二叉树
顺序结构:
可扩容数组,底层用数组实现,顺序排列,标号连续,内存空间连续
优缺点:
查询速度快,在中间频繁的增删操作慢,碎片内存空间利用不到
链式结构:
底层用节点(Object date 和 前后节点或者下一个结点的引用)
内存顺序连续,但是在物理存储空间不连续
优缺点:
频繁的增删操作速度快,查询速度慢,综合起来没有ArrayList好,空间利用率好,可以利用到物理内存中的碎片空间
栈:
可以用数组或者链表实现,先进后出原则
方法:
push()压栈 和 pop()弹栈
队列:
可以用数组或者链表实现,先进先出原则
二叉树
普通二叉树:
满二叉树:
完全二叉树:
k - 1 层是满二叉树,k 层从左到右是连续的
平衡二叉树:
左右子树高度相差不超过1
排序二叉树:
左子树的值都小于根,右子树的值都大于等于根
二叉树的遍历:
先序遍历 - 根左右
中序遍历 - 左根右
后序遍历 - 左右根
总结
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!
相关推荐
-
java数据结构基础:单链表与双向链表
目录 单链表: 实现思路: 代码实现: 双向链表: 实现思路: 代码实现: 总结 单链表: 每个数据是以节点的形式存在的 每个节点分为数据域和指针域 数据域中保存该节点的数据 指针域中保存指向下一个节点的指针 实现思路: 节点类SingleNode中保存数据和指向下一个节点的指针 单链表类SingleLinkedList中保存链表的头节点,实现相关链表方法 对于链表方法,涉及到位置查找,如在指定位置增加.删除节点,需要使用一个临时变量temp从头节点开始遍历,直至找到对应的位置. 对于节点的增加
-
java数据结构基础:循环链表和栈
目录 循环链表: 实现思路: 代码实现: 栈: 实现思路: 代码实现: 总结 循环链表: 与单链表的最后一个节点的指针域为null不同,循环链表的最后一个节点的指针指向头结点 实现思路: 初始化时将头结点指向自身,添加节点到链表末尾时,将新节点的指针指向头结点 在遍历链表时,判断是否遍历到链表末尾,需要判断当前指针的下一个节点是否为头结点 代码实现: 节点类CircleNode: public class CircleNode { public int data; public CircleNo
-
java数据结构基础:稀疏数组
目录 稀疏数组: 实现思路: 举例: 二维数组转稀疏数组实现思路: 稀疏数组恢复二维数组实现思路: 代码实现: 输出结果: 总结 稀疏数组: 当一个二维数组中大部份的值为0,或者为同一值的时候,可以用稀疏数组来保存 实现思路: 记录二维数组有多少行多少列.多少个不同的值 把不同的值按照所在行列,记录在一个规模较小的数组中 举例: 11×11的二维数组: 对应的稀疏数组: 其中,第一行分别为,原二维数组总行数.总列数.不为0的数的个数 之后几行的每一列分别代表所在行.所在列.值 二维数组转稀疏数组
-
Java数据结构 递归之迷宫回溯案例讲解
问题介绍: 用二维数组表示一个迷宫,设置迷宫起点和终点,输出迷宫中的一条通路 实现思路: 二维数组表示迷宫: 0表示路且未走过.1表示墙.2表示通路,3表示已经走过但走不通 设置寻路方法setWay,传入地图和坐标参数 默认方向策略:下.右.上.左 假定传入的店没有走过且可以走通,将其值置为2,然后向下寻路,也就是将坐标 (i + 1, j) 传入寻路方法中 进行递归寻路,向下移动后,再次按照方向策略进行寻路,即再向下寻路,直到遇到死路,即下右左均走不通(因为将走过的路置为2,故向上也走不通,即
-
java数据结构基础:顺序队列和循环队列
目录 队列: 顺序队列: 代码实现: 循环队列: 代码实现: 总结 队列: 队列是一种受限制的线性表 只允许在表的一端进行插入,另一端进行删除 插入的一端称作队尾,删除的一端称作队头 具有先进先出的特性 顺序队列: 队列底层数据采用数组存储 设置队头指针front指向队头元素前一个位置,初始值为-1 设置队尾指针rear指向队尾元素,初始值为-1 判满:rear == maxSize - 1 判空:rear == front 代码实现: //顺序队列 public class ArrayQueu
-
一篇文章带你入门Java数据结构
目录 1.逻辑结构和物理结构 2.顺序结构,链式结构,栈,队列,二叉树 二叉树 普通二叉树: 满二叉树: 完全二叉树: 平衡二叉树: 排序二叉树: 二叉树的遍历: 总结 1.逻辑结构和物理结构 逻辑结构: 集合: 数据与数据之间没有任何关系 线性: 一对一关系 树型: 一对多关系 图型: 多对多关系 物理结构: 顺序结构(数组): 链式结构(链表): 2.顺序结构,链式结构,栈,队列,二叉树 顺序结构: 可扩容数组,底层用数组实现,顺序排列,标号连续,内存空间连续 优缺点: 查询速度快,在
-
一篇文章带你入门java集合
目录 一.简介 1.java集合框架图 2.集合框架体系 3.Set和List的区别 二.ArrayList 1.定义 2.用实例了解ArrayList 三.LinkedList 1.语法 2.示例 四.HashSet 1.定义 2.语法 3.示例 五.HashMap 1.定义 2.语法 3.示例 Java HashMap 方法 六.Iterator(迭代器) 1.定义 2.示例 七.List和数组互转 总结 一.简介 1.java集合框架图 从上面的集合框架图可以看到,Java 集合框架主要包
-
一篇文章带你入门java面向对象
目录 一.继承 示例: 二.重载 三.接口 1.接口与类相似点: 2.接口与类的区别: 3.语法 四.枚举 1.定义 2.迭代枚举元素 3.在 switch 中使用枚举类 总结 一.继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为 本章就以人.学生.老师作为例子.学生和老师都继承人这个对象,都有人的特征和行为,人就是父类,老师和学生就是子类 示例: 人类: package com.zhouzy.base.t7;
-
一篇文章带你入门Java修饰符
目录 定义 分类 访问控制修饰符 非访问控制修饰符 修饰符的使用说明 修饰类 修饰方法 访问控制修饰符 非访问控制修饰符 修饰变量 总结 定义 Java修饰符:修饰符用来定义类.方法或者变量,通常放在语句的最前端. 分类 主要分为2类: 访问控制修饰符 非访问控制修饰符 访问控制修饰符 可以使用访问控制符来保护对类.变量.方法和构造方法的访问.分为以下4中权限:private,default,protected,public. 权限说明: 修饰符 当前类 同包 子类(不同包) 不同包(其他类)
-
一篇文章带你入门Java字面量和常量
目录 引言 概念 字面量 字面量的分类 常量 总结 引言 ♀ 小AD:哥,前两天我没有闪现到刺客脸上了吧 ♂ 明世隐:在这方面做的有进步. ♀ 小AD:明哥教的好,通过学习Java关键字,游戏水平也得到了提升,一举两得,舒服. ♂ 明世隐:可是你看到残血还是上头啊,是了多少次,你说? ♀ 小AD:5.6次吧 ♂ 明世隐:岂止5.6,起码10次. ♀ 小AD:这不是看到200金币,经不住诱惑吗 ♂ 明世隐:关爱残血,你学哪里去了,游戏中就不能多一些人间的关爱吗?你就不能关爱一下放暑假的小弟弟小妹妹
-
一篇文章带你入门Java继承
目录 Java中继承 什么是继承: 为什么要用继承: 学习总结: 继承关键字:extends 总结 Java中继承 什么是继承: 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为. 为什么要用继承: 可以去掉重复代码,方便后期维护 举个列子,大家应该都玩过英雄联盟,每个英雄都是一个类,如果说不用继承的话每次都要重复定义每个英雄的成员属性,如下图我举了一个MF,一个EZ的列子 public class MissFortu
-
一篇文章带你入门Java封装
目录 什么是封装 如何实现封装 代码展示 构造方法 注意点: 代码展示 总结 封装的优点 什么是封装 Java中的封装是将数据(变量)和作用于数据(方法)的代码作为一个单元包装在一起的机制. 在封装中,类的变量将从其他类隐藏,并且只能通过当前类的方法访问. 如何实现封装 可以分为两步: 第一步:将类的变量声明为private. 第二步:提供公共set和get方法来修改和获取变量的值. 代码展示 public class User { private String name; private in
-
一篇文章带你入门Java基本概念
目录 Java基本概念 一.JRE(Java运行时环境) 二.JDK(Java开发工具) 三.Java源代码文件(.class) 四.Java字节码文件(.java) 五.Java虚拟机(JVM) 六.跨平台运行 七.JDK与JRE.JVM的关系? 八.几个结论 总结 Java基本概念 JDK包含了不少Java开发相关命令.如,javac.java.javap.javaw.javadoc.虽然现在的Java开发都使用IDE完成,基本上不会直接使用这些命令.但是理解这些命令的用法,可以让我们更加扎
-
一篇文章带你入门Java运算符
目录 算数运算符(Arithmetic operator) 关系运算符(Relational operator) 逻辑运算符(Logical operator) 赋值运算符(Assignment Operators) 三元运算符(Ternary operator) 运算符优先级 标识符的命名规则和规范 关键字定义和特点 保留字 总结 运算符时一种特殊的符号,用以表示数据的运算,赋值和比较等. 算数运算符 赋值运算符 关系运算符 逻辑运算符 位运算符 三元运算符 算数运算符(Arithmetic
-
一篇文章带你入门java泛型
目录 一.什么是泛型 二.语法 三.示例 1.简单示例 2.返回最大值-支持各种数据类型 3.泛型类 4.类型通配符 总结 一.什么是泛型 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数. 二.语法 你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数.根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用. 下面是定
随机推荐
- 深入浅析SQL中的group by 和 having 用法
- 浅析JavaScript中的事件机制
- Oracle CBO优化模式中的5种索引访问方法浅析
- Python中DJANGO简单测试实例
- golang实现通过smtp发送电子邮件的方法
- es6学习之解构时应该注意的点
- JS读取cookies信息(记录用户名)
- 深入HTTP响应状态码速查表的详解
- Python中operator模块的操作符使用示例总结
- C语言设计图书登记系统与停车场管理系统的实例分享
- 深入理解Python中变量赋值的问题
- 程序员编程从初级到中级的10个秘诀
- ie中多id的调用方法
- css 命名规范
- sqlserver数据库使用存储过程和dbmail实现定时发送邮件
- JS实现向iframe中表单传值的方法
- 原生JS和jQuery版实现文件上传功能
- Android指纹解锁示例代码
- 深入剖析Java编程中的序列化
- asp.net 退出登陆(解决退出后点击浏览器后退问题仍然可回到页面问题)