Java 数据结构快速入门
数据结构:栈
简介
栈(stack),又称堆栈,它是运算受限的线性表。
限制
栈(stack)的限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。
采用该结构的特点
1、先进后出(即:存进去的元素,要在后它后面的元素依次取出后,オ能取出该元素)。
2、栈的入口、出口的都是栈的顶端位置。
例如
子弹压进弹夹先压进去的子弹在下面,后压进去的子弾在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的子弹。
说明
栈(stack):弹夹
入栈(压栈):向弹夹中添加子弹
出栈(弹栈):子弹从弹夹中弹出来
数据结构:队列
简介
队列(queue),简称队,它同堆栈一样,也是一种运算受限的线性表。
限制
队列的限制是仅允许在表的一端进行插入而在表的另一端进行删除。
采用该结构的特点
1、先进先出(即:存进去的元素,要在后它前面的元素依次取出后,オ能取出该元素)。
2、队列的入口、出口各占一侧。
例如
小火车过山洞,车头先进去,车尾后进去;车头先出来,车尾后出来。
数据结构:数组
简介
数组(Array)是有序的元素序列,数组是在堆内存中开辟一段连实的空间,并在此空间存放元素。
采用该结构的特点
1、查找元素快
2、增删元素慢
为什么说数组查找元素快,增删元素慢
1、数组查询快:数组的地址是连续的我们通过数组的首地址可以找到数组,通过数组的素引可以快速查找某一个
2、元素增删慢:数组的长度是固定的我们想要增加/删除一个元素,必须创建一个新数组把源数组的数据复制过来
3、增删元素,会在堆内存中频繁的创建新数组、复制数组中的元素、销毁数组,导致效率低下
例如
一排出租屋,有100个房间,从001到100每个房间都有固定编号,通过编号就可以快速找到租房子的人。
数据结构:链表
简介
链表(linked、list)由一系列结点node(链表中毎一个元素称为结点)组成,结点可以在运行时动态生成。
每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储结点地址的指针域。
链表结构有单向链表与双向链表
单向链表
链表中只有一条链子,不能保证元素的顺序(存储元素和取出元素的顺序有可能不一致)
双向链表
链表中有两条链子有一条链子是专门记录元素的顺序,是一个有序的集合
说明
链表中的每一个元素也称之为一个节点
一个节点包含了一个数据源(存储数据),两个指针域(存储地址),一个指针域存储本节点的地址,一个指针域存储第一个节点的地址
采用该结构的特点
多个结点之间,通过地址进行连接。例如:多个人手拉手,每个人使用自己的右手拉住下个人的左手,依次类推,这样多个人就连在一起了。
查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素。
增删元素快:增加或删除某个元素只需修改一下连接元素之间的地址值即可
为什么说链表查询慢,增删快
查询慢:链表中地址不是连续的每次查询元素都必须从头开始查询
增删快:链表结构增加/删除一个元素对链表的整体结构没有影响,所以增删快
图形理解
每个node

单向链表node之间的连接(无序的)

双向链表node之间的连接(有序的)

假如想要增删数据,只需更改连接下一个node的地址值即可
数据额结构:红黑树
首先简单了解一下计算机中的树(如图:“下面分支的连接不是箭头,而是线”)

什么是二叉树
分支不能够超过两个的树
如:

什么是排序树/查找树
在二叉树的基础上,元素是有大小顺序的,左子树小,右子树大
如:

平衡树
左子树 = 右子树
如:

不平衡树
左子树 != 右子树
如:

红黑树
特点
趋近于平衡树,查询的速度非常的快,查询叶子节点最大次数和最小次数不能超过2倍
约束
1.节点可以是红色的或者黑色的
2.根节点是黑色的
3.叶子节点(空节点)是黑色的
4.每个红色的节点的子节点都是黑色的
5.任何一个节点到其每个叶子节点的所有路径上黑色节点数相同
例如:

Java 数据结构快速入门的更多相关文章
- Java Web快速入门——全十讲
Java Web快速入门——全十讲 这是一次培训的讲义,就是我在给学生讲的过程中记录下来的,非常完整,原来发表在Blog上,我感觉这里的学生可能更需要. 内容比较长,你可以先收藏起来,慢慢看. 第一讲 ...
- JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识
JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...
- JAVA WEB快速入门之从编写一个基于SpringMVC框架的网站了解Maven、SpringMVC、SpringJDBC
接上篇<JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP.IOC)>,了解了Spring的核心(AOP.IOC)后,我们再来学习与实践Maven.Sp ...
- JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP、IOC)
接上篇<JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构.调试.部署>,通过一个简单的JSP WEB网站了解了JAVA WEB相关的知识,比如:Ser ...
- JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署
接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...
- 如何让一个Java新手快速入门?
问题中问到如何让java新生快速入门,既然想快速入门的话那最简单粗暴的方法就是多看视频,加上跟着视频敲代码,刚开始可能不知道是什么意思,敲得多了就慢慢知道是什么意思了. 刚开始建议在网上找那种结合自己 ...
- java 多线程 快速入门
------------恢复内容开始------------ java 多线程 快速入门 1. 进程和线程 什么是进程? 进程是正在运行的程序它是线程的集合 进程中一定有一个主线程 一个操作系统可以有 ...
- 没有基础的初学者学java怎样快速入门?超全的学习路线图
现在地球人都知道互联网行业工资高,上万都是小case,不值一提.可是对于大部分人来说,工资七八千都算很难了.那我也想学java,当程序员,赚大钱.可是作为一个初学者,怎样才可以快速入门呢?早点入门就可 ...
- java框架--快速入门
spring快速入门 1.创建项目 1.1创建项目文件夹 1.2启动idea ->文件->打开->点击创建的项目文件夹 1.3右键创建 ...
随机推荐
- 第二章FISCO BCOS sdk下载和配置是使用
想了解相关区块链开发,技术提问,请加QQ群:538327407 前提: 1.已经搭建好了一个底层,并且可以正常运行 2.确定外部是否可以连接,如果是云上的服务器,要保证外网可以访问 正式流程 1.下载 ...
- 关于POSTMAN做并发压测
一开始我个人在做测试时用到了POSTMAN,用了两种方式做测试, 第一种: 测试发现这种方式是阻塞排队,我让接口睡两秒,这100次请求间隔就是2秒,是串行执行 于是想到第二种,在一个collectio ...
- dotnet 判断程序当前使用管理员运行降低权使用普通权限运行
有一些程序是不想通过管理员权限运行的,因为在很多文件的读写,如果用了管理员权限程序写入的程序,其他普通权限的程序是无法直接访问的.本文告诉大家如何判断当前的程序是通过管理员权限运行,然后通过资源管理器 ...
- WCF 服务应用程序
1. 创建 WCF 服务程序和客户端程序,参考如下: https://docs.microsoft.com/zh-cn/dotnet/framework/wcf/getting-started-tut ...
- 【Docker Compose】简介与安装
1.简介 Compose 是一个用户定义和运行多个容器的 Docker 应用程序.在 Compose 中你可以使用 YAML 文件来配置你的应用服务.然后,只需要一个简单的命令,就可以创建并启动你配置 ...
- Channel 9视频整理【4】
Eric ShangKuan 目前服務於台灣微軟,擔任技術傳教士 (Technical Evangelist) 一職,網路上常用的 ID 為 ericsk,對於各項開發技術如:Web.Mobile.A ...
- python简单小程序
#足球队寻找10 到12岁的小女孩(包含10岁和12岁),编写程序询问用户性别和年龄,然后显示一条消息指出这个人是否可以加入球队,询问10次,输出满足条件的总人数#询问10次,输出满足要求的总人数 o ...
- [转]SIMD、MMX、SSE、AVX、3D Now!、NEON
转载来源<[整理]SIMD.MMX.SSE.AVX.3D Now!.neon> 本文摘取部分内容,详细请看原文. SIMD NEON是通用的SIMD(单指令多数据)引擎. 对于SISD,每 ...
- 分布式大牛详解Zookeeper底层原理
很多学员都在反馈,说zk很难学,学的不是很明白,在这里,我继续带着大家详解一遍Zookeeper 首先zk是什么呢首先肯定是一个个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用 ...
- 学习python库:elasticsearch-py
一.介绍 elasticsearch-py是一个官方提供的low-level的elasticsearch python客户端库.为什么说它是一个low-level的客户端库呢?因为它只是对elasti ...