数据结构有什么用?现实世界的存储,我们使用的工具和建模。每种数据结构有自己的优点和缺点,想想如果Google的数据用的是数 组的存储,我们还能方便地查询到所需要的数据吗?而算法,在这么多的数据中如何做到最快的插入,查找,删 除,也是在追求更快。

文章目录

  • 前言
  • 常见的数据结构
  • 队列
  • 数组
  • 链表
  • 红黑树

前言

常见的数据结构

数据存储的常用结构有:栈、队列、数组、链表和红黑树。我们分别来了解一下:

栈:stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其 他任何位置进行添加、查找、删除等操作。
简单的说:采用该结构的集合,对元素的存取有如下的特点 先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。
例如,子弹压进弹 夹,先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的 子弹。 栈的入口、出口的都是栈的顶端位置。

特点先进后出

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

队列

队列:**queue,简称队,它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入, 而在表的另一端进行删除。

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

先进先出(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素)。例如,小火车过山 洞,车头先进去,车尾后进去;车头先出来,车尾后出来。

数组

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

简单的说,采用该结构的集合,对元素的存取有如下的特点: 查找元素快:通过索引,可以快速访问指定位置的元素
特点: 查找元素快,增删慢

增删元素慢 指定索引位置增加元素:需要创建一个新数组,将指定新元素存储在指定索引位置,再把原数组元素根 据索引,复制到新数组对应索引的位置。如下图

链表

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

简单的说,采用该结构的集合,对元素的存取有如下的特点: 多个结点之间,通过地址进行连接。例如,多个人手拉手,每个人使用自己的右手拉住下个人的左手,依次 类推,这样多个人就连在一起了。

查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素 增删元素快: 增加元素:只需要修改连接下个元素的地址即可。

红黑树

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

我们要说的是二叉树的一种比较有意思的叫做红黑树,红黑树本身就是一颗二叉查找树,将节点插入后,该树仍然 是一颗二叉查找树。也就意味着,树的键值仍然是有序的。
红黑树的约束: 1. 节点可以是红色的或者黑色的
2. 根节点是黑色的
3. 叶子节点(特指空节点)是黑色的
4.每个红色节点的子节点都是黑色的
5. 任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同 红黑树的特点: 速度特别快,趋近平衡树,查找叶子元素最少和最多次数不多于二倍

图文看懂常见数据结构相关推荐

  1. 图解!24 张图彻底弄懂九大常见数据结构!

    作者 | Amazing10 责编 | 屠敏 数据结构想必大家都不会陌生,对于一个成熟的程序员而言,熟悉和掌握数据结构和算法也是基本功之一.数据结构本身其实不过是数据按照特点关系进行存储或者组织的集合 ...

  2. 水表读数图解_水表怎么看?图文讲解教您看懂水表吨数

    水表是几乎每个家庭都有的设备,想要知道家里的水表读数,就需要查看水表吨数,您知道怎么看水表吨数吗?今天蜜罐蚁小编给大家图文介绍下如何看水表吨数. 下面看下不同水表读数方法,分别介绍下新式水表和老式水表 ...

  3. 计算机硬件 平面图,看懂室内平面图画法、平面配置原则,一次了解常见的平面图种类!...

    室内平面图是做建筑设计或室内装修时很重要的参考图面,所有的工程都会依照规划的平面图进行施作.在从前没有电脑的时代,平面设计师也许都是用手绘:可是在电脑发达的现今社会,使用AutoCAD等软件绘制已经是 ...

  4. 一文学会看懂汽车中的传感器电路(图文详解)

    1.加速踏板位置传感器电路识读 大众车系普遍采用电子节气门,取消了加速踏板和节气门之间的拉锁,转而采用加速踏板位置传感器.加速踏板位置传感器向发动机控制单元提供驾驶员操作加速踏板的信息,发动机控制单元 ...

  5. 送书 | 你一定能看懂的算法基础书(代码示例基于Python)

    本文引自图灵教育<算法图解> 你一定能看懂的算法基础书:代码示例基于Python:400多个示意图,生动介绍算法执行过程:展示不同算法在性能方面的优缺点:教会你用常见算法解决每天面临的实际 ...

  6. 一篇文章一张思维导图看懂Android学习最佳路线

    一篇文章一张思维导图看懂Android学习最佳路线 先上一张android开发知识点学习路线图思维导图 Android学习路线从4个阶段来对Android的学习过程做一个全面的分析:Android初级 ...

  7. java队列_如何彻底搞懂 Java 数据结构?CSDN 博文精选

    作者 | 张振华.Jack 责编 | 郭芮 出品 | CSDN 博客 本文和大家一起来重温<Java数据结构>经典之作. Java数据结构 要理解Java数据结构,必须能清楚何为数据结构? ...

  8. 追源索骥:透过源码看懂Flink核心框架的执行流程

    https://www.cnblogs.com/bethunebtj/p/9168274.html 追源索骥:透过源码看懂Flink核心框架的执行流程 前言 1.从 Hello,World WordC ...

  9. 实现根据条件删除_常见数据结构的实现(一):跳跃表

    知乎的小伙伴们好,这是我在知乎写的第一篇文章哈.我写这篇文章的目的主要是和大家分享一些想法,交流学习一下. 这系列的文章是分析常见数据结构的实现,包括跳跃表.二叉堆.前缀树.红黑树等等...数据结构这 ...

最新文章

  1. [铁道部信息化管理]号外
  2. t-sql使用小记2010-01-27
  3. linux下的各种系统错误errno描述一览
  4. 不会做特征工程的 AI 研究员不是好数据科学家!上篇 - 连续数据的处理方法 本文作者:s5248 编辑:杨晓凡 2018-01-19 11:32 导语:即便现代机器学习模型已经很先进了,也别
  5. linux webapi测试,Webapi管理和性能测试工具WebBenchmark
  6. X11/extensions/XTest.h:没有那个文件或目录
  7. ⼩程序中⽀持es7的async语法
  8. 解析PayPal支付接口的PHP开发方式
  9. 在Eclipse中安装JSHint插件
  10. 【iOS安全】iOS应用安全开发总结
  11. 安卓多台手机之间屏幕同步与pc通过adb控制手机
  12. coun(1)、count(*)和count(列)的区别
  13. 简单的解决textarea文本框内容换行,对应到页面的内容也换行的问题
  14. 使用jsoup入门java爬虫 案例
  15. R语言批量处理2——导入excel,定位提取合并为数据框data.frame
  16. Mysql 的自增主键达到最大值,怎么办
  17. 简单聊一聊UseCompressedOops UseCompressedClassPointers这两个JVM参数
  18. 达观数据超自动化机器人实践分享 | 达观数据产品总监邵万骏
  19. 腾讯QQ至尊宝功能停止申请 已试运营三年
  20. LLVM 介绍(一) 项目与Chris Lattner

热门文章

  1. 数学分析教程史济怀练习9.4
  2. 《A Metric Learning Reality Check》笔记
  3. 从微软官网下载VisualStudio离线包
  4. 微信小程序:和平精英吃鸡捏脸数据助手微信小程序源码下载支持激励视频
  5. 网狐棋牌 SQL Server 数据库配置
  6. 【MySQL】mysql | linux | 解决mysql cpu | cpu飙升 | cpu100% cpu占用过高
  7. 形式语言与自动机基础
  8. 中南大学python程序设计_关于公布2017年中南大学精品教材.PDF
  9. html 标签 转码 解码
  10. 调用 NtUserXXX 引发系统 BSOD 的问题分析