学习目标:

了解常见的数据结构

学习内容:

栈、队列、数组、链表、红黑树

学习产出:

1. 数据结构

数据结构 : 就是数据用什么样的方式组合在一起

常见的数据结构有: 栈, 队列, 数组, 链表和红黑树. 我们分别来了解一下.
1.1 栈(Stack)

栈 : stack, 又称堆栈, 它是运算受限的线性表, 其限制是仅允许在标的一端进行插入和删除操作, 不允许在其他任何位置进行添加, 查找, 删除等操作.

简单的说, 采用该结构的集合, 对元素的存取有如下特点 :

先进后出(FILO), ( 即存进去的元素, 要在他后面的元素依次取出后, 才能取出该元素). 例如 子弹被压进弹夹, 要先弹出上面的子弹, 然后才能取出下面的子弹栈的入口, 出口都是栈的顶端位置

存入元素顺序 : A B C

取出元素顺序 : C B A

这里两个名词需要注意 :

压栈 : 就是存元素, 即把元素存储到栈的顶端位置, 栈中已有元素依次向栈底方向移动一个位置.
弹栈 : 就是取元素, 即把栈顶端位置的元素取出, 栈中已有元素依次向栈顶方向移动一个位置.

1.2 队列(Queue)

队列 : 即queue, 简称队, 他同堆栈一样, 也是一种运算受限的线性表, 其限制是仅允许在表的一段进行插入, 而在表的另一端进行删除.
简单的说, 采用该结构的集合, 对元素的存取有如下的特点 :
先进先出 (即, 存进去的元素, 要在他前面的元素依次取出后, 才能取出该元素 ) 例如 火车进隧道, 车头先进去, 车尾后进去, 车头先出来, 车尾后出来
队列的入口, 出口各占一侧.

存入元素顺序 : A B C

取出元素顺序 : A B C 案例: 过安检门

1.3 数组(Array)

数组 : Array 是有序的元素序列, 数组是在内存中开辟一段连续的空间, 并在此空间存放元素. 就像是一排出租屋, 有100 个房间, 从001到100每个房间都有固定的编号, 通过编号就可以快速找到租房子的人.

简单的说, 采用该结构的集合, 对元素的存取有如下的特点 :

查找元素快, 通过索引, 可以快速访问指定位置的元素

数组的特点 : 查询快, 增删慢

增删慢的原因:

指定索引位置增加元素, 需要*创建一个新数组,* 将指定新元素存储在指定索引位置, 再把源数组元素根据索引, 复制到新数组对应索引的位置.指定索引位置删除元素, 需要创建一个新数组, 把原数组元素根据索引, 赋值到新数组对应索引位置, 原数组中指定索引位置元素不复制到新数组中.

1.4 链表(LinkedList)

链表 : linked list , 由一系列结点 node (链表中每一个元素称为结点) 组成, 结点可以在运行时动态生成, 每个结点包括两个部分, 一个是存储数据元素的数据域, 另一个是存储下一个结点地址的指针域, 我们常说的链表结构有单向链表与双向链表. 这里先介绍单向链表

简单的说, 采用该结构的集合, 对元素的存取有如下的特点 :

多个结点之间, 通过地址进行连接, 例如:多个人手拉手, 每个人使用自己的右手拉住下个人的左手, 依次类推, 这样多个人就连在一起了.

链表的特点: 查找元素慢, 增删元素快

原因 :

查找元素慢 : 链表中的地址不是连续的, 每次查询元素都必须从头开始查询, 想要查找某个元素, 需要通过连接的节点, 依次向后查找指定元素.增删元素快 : 链表结构增加/删除一个元素, 对链表的整体结构没有影响, 所以增删快

链表中的每一个元素也称之为一个节点, 一个节点包含了一个数据域( 存储数据 ), 两个指针域( 存储地址 )

单向链表 : 链表中只有一条链子, 不能保证元素的顺序. 存储元素和取出元素, 顺序有可能不一致

双向链表 : 链表中有两条链子, 有一条链子是专门记录元素的顺序的.所以它是一个有序的集合

1.5 红黑树

二叉树 : binary tree, 是每个结点不超过2的有序树(tree)

简单理解 : 就是一种类似于我们生活中树的结构, 只不过每个结点上都最多只能有两个子结点, 二叉树是每个结点最多有两个子树的树结构, 顶上的叫根结点, 两边被称作左子树和右子树

我们要说的是二叉树的一种比较有意思的, 叫做红黑树, 红黑树本身就是一棵二叉查找树, 将结点插入后, 该树仍然是一颗二叉查找树.

红黑树可以通过红色节点和黑色节点尽可能的保证二叉树的平衡,从而来提高效率。

红黑树的约束:

节点可以是红色的或者黑色的
根节点是黑色的
叶子节点(特指空节点)是黑色的
每个红色节点的子节点都是黑色的
任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同

红黑树的特点: 速度特别快,趋近平衡树,查找叶子元素最少和最多次数不多于二倍

简单的数据结构介绍(栈、队列、数组、链表、红黑树)相关推荐

  1. 常见的数据结构:栈 队列 数组 链表 红黑树——List集合 _ HashSet集合、可变参数 collections集合 Map集合

    2021-06-07复习java 一.常见的数据结构 栈(先进后出) 队列 数组 链表 红黑树 二.List集合_介绍&常用方法 ArrayList集合 Linkedlist集合 三.Hash ...

  2. Java集合常见数据结构-栈/队列/数组/链表/红黑树

    数组 链表 红黑树

  3. 【Java8】堆栈/队列/数组/链表/红黑树,List/set子接口,hashcode/hashset,Map/内部接口,/统计字符个数,debug,斗地主,Collections,TreeSet

    文章目录 1.堆栈/队列/数组/链表:数据结构即计算机组织管理数据的方式,堆栈指的是内存图中的栈,不是堆 2.红黑树:二查,二查平,二查平1倍 3.List子接口:集合,IndexOutOfBound ...

  4. 存数组元素的个数_HashMap1.8之后为什么要采用数组+链表+红黑树的储存方式?

    HashMap概述 HashMap是基于Map接口实现的,采取(key,value)的储存方式.其中key和value可以为空,但是key不能重复.下面我们来详细解读一下HashMap的底层实现原理. ...

  5. 常见数据结构-栈-队列-数组-链表-哈希表

    数据结构   数据结构是计算机存储.组织数据的方式.是指相互之间存在一种或多种特定关系的数据元素的集合   通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率 持续更新,学一个记一个- 栈 ...

  6. Android技术栈(五)HashMap(包括红黑树)与ArrayMap源码解析

    1 总览 本文会对 Android 中常用HashMap(有红黑树)和ArrayMap进行源码解析,其中 HashMap 源码来自 Android Framework API 28 (JDK=1.8) ...

  7. 栈,队列和链表三者之间的关系与区别

    最近一直在学习算法,刷算法题,但是自从大学毕业以来,数据结构的知识都还给老师了,只会个数组,所以前期刷的题目也都是有关数组的 最近跟着小册重学了一遍数据结构,今天就记录一下栈,队列和链表三者之间的关系 ...

  8. 有十五个数按由大到小顺序存放在一个数组中_数据结构基础 (代码效率优化, 线性表, 栈, 队列, 数组,字符串,树和二叉树,哈希表)...

    作者:张人大 代码效率优化 复杂度 -- 一个关于输入数据量n的函数 时间复杂度 -- 昂贵 与代码的结构设计有着紧密关系 一个顺序结构的代码,时间复杂度是O(1), 即任务与算例个数 n 无关 空间 ...

  9. Java--敲重点!JDK1.8 HashMap特性及底层数组+单链表+红黑树知识(建议收藏)

    ❤️‍大家好,我是贾斯汀!❤️‍ 学习目录 学习背景 HashMap特性 HashMap添加元素四步曲 前奏:HashMap如何添加一个元素? 第一步曲:根据key得到hashCode值 第二步曲:根 ...

最新文章

  1. 一张照片攻破人脸识别系统:能点头摇头张嘴
  2. 连接查询中的ON 子句和 WHERE 子句
  3. 【机器视觉】 close_measure算子
  4. 关于优酷开发sdkdemo的布局
  5. 开发中三个经典的原则
  6. mysql客户端版本太低_windows一机多装mysql,5.5低版本+5.8高版本
  7. Dalvik指令备忘
  8. Android系统(133)---Google Play Store无法搜索应用或提示应用不兼容,此类问题该如何定位及分析
  9. linux 下PCIE控制器设备树 学习
  10. the art of seo(chapter seven)
  11. labelme标注的json文件转换成png格式
  12. 【模电】0007 有源滤波器2(二阶有源滤低通波器)
  13. c语言编程实现电脑关机,C语言让电脑关机?system函数功能够大够硬
  14. 使用腾讯云文字识别提取图片中的文字内容
  15. 岛屿最大面积 leetcode Java_【Leetcode刷题】岛屿的最大面积
  16. CAN和CANFD的主要差异
  17. 04-Mybatis-增删改查
  18. 阿里大鱼短信Spring Boot 版
  19. web版本 开源压测工具_14款好用开源的Web应用压力负载,性能测试工具推荐
  20. 【日语】【歌词】「Lemon」--米津玄师

热门文章

  1. 豆瓣技术团队的指环王文化
  2. 中国燃料电池行业“十四五”规划及需求规模分析报告2021-2027年
  3. 关于制作基于STM32的指纹打卡器(不完全体)
  4. java Spring的AOP理解和动态代理
  5. Oracle应用之修改表字段类型
  6. 数据查询和业务流分开_滴滴实时数仓逐层剖解:实时与离线数据误差0.5%
  7. qLabel 字体大小不受控制
  8. 第三部分 数据结构 -- 第四章 图论算法-1383:刻录光盘(cdrom)
  9. 项目GIF斗图软件 总结概述
  10. iOS端URL编码和解码过程