八大数据结构 —— 数组 栈 队列 链表 树 散列表 堆 图

1. 数组

优点:按照索引查询速度快、遍历数组方便

缺点:

  • 数组大小固定后无法扩容
  • 数组只能存储一种类型的数据
  • 添加删除慢(需要移动其它元素)

使用场景:频繁查询,对存储空间要求不大;增加删除少的情况

一维数组:a[0]     a[1]    a[2]    a[3]

2. 栈

栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作 。

特点: 先进后出

使用场景 :栈常应用于实现递归功能方面的场景,例如斐波那契数列。

3. 队列

队列也是一种线性表 。 不同的是,队列可以在一端添加元素,在另一端取出元素 。

特点:先进先出

使用场景 : 因为队列先进先出的特点,在多线程阻塞队列管理中非常适用。

4. 链表

链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域(内存空间),另一个是指向下一个结点的指针域。根据指针的指向,链表能形成不同的结构。例如:单链表,双向链表,循环链表等。

优点:

  • 很常用的一种数据结构,不需要初始化容量,可以任意加减元素;
  • 添加或删除元素时只需要改变前后两个元素结点的指针域指向地址即可,所以添加删除速度很快。

缺点:

  • 因含有大量的指针域,占用空间较大;

  • 查找元素需要遍历链表来查找,非常耗时。

使用场景:数据量较小,需要频繁添加删除操作的场景。

5.树

树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。

特点:

  • 每个结点有零个或多个子结点
  • 没有父结点的结点为根节点;
  • 每个非根结点有且只有一个父结点
  • 除了根结点外,每个子结点可以分为多个不相交的子树

种类:

  • 无序树: 树中任意节点的子结点之间没有顺序关系,这种树称为无序树,也称为自由树;

  • 有序树: 树中任意节点的子结点之间有顺序关系,这种树称为有序树;

  • 二叉树: 每个节点最多含有两个子树的树称为二叉树;

  • 完全二叉树: 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。

  • 满二叉树:

    • 国内教程定义 :一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。

  • 国外(国际)定义:a binary tree T is full if each node is either a leaf or possesses exactly two childnodes.

  • 大意为:如果一棵二叉树的结点要么是叶子结点,要么它有两个子结点,这样的树就是满二叉树 (一棵满二叉树的每一个结点要么是叶子结点,要么它有两个子结点,但是反过来不成立,因为完全二叉树也满足这个要求,但不是满二叉树)

上图中这个二叉树也是满二叉树。但是按照国内的定义,它却不是满二叉树。

  • 霍夫曼树: 带权路径最短的二叉树称为哈夫曼树或最优二叉树;

6. 散列表

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

7. 堆

堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。

特点:

  • 堆中某个节点的值总是不大于或不小于其父节点的值;

  • 堆总是一棵完全二叉树。

    将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

8. 图

图是另一种非线性数据结构。在图结构中,数据结点一般称为顶点,而边是顶点的有序偶对。如果两个顶点之间存在一条边,那么就表示这两个顶点具有相邻关系
图详情

八大数据结构-数组 栈 队列 链表 树 散列表 堆 图相关推荐

  1. 数据结构栈队列链表数组

    目录: 数据结构 栈(stack) 队列 链表 数组 数据结构 数据结构是什么 简单来说,数据结构就是设计数据以何种方式存储在计算机中 比如:列表,集合,与字典等都是一种数据结构 程序 = 数据结构 ...

  2. 数据结构——数组、单向链表、双向链表

    原文:http://www.cnblogs.com/skywang12345/p/3561803.html 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性 ...

  3. 将列表转成数组_漫画 | 什么是散列表(哈希表)?

    创建与输入数组相等长度的新数组,作为直接寻址表.两数之和的期望是Target,将Target依次减输入数组的元素,得到的值和直接寻址表比较,如果寻址表存在这个值则返回:如果不存在这个值则将输入数组中的 ...

  4. 数据结构与算法(七)—— 散列表结构及其实现和应用

    注:本篇内容参考了<Java常用算法手册>.<大话数据结构>和<算法导论(第三版)>三本书籍.并参考了百度百科. 本人水平有限,文中如有错误或其它不妥之处,欢迎大家 ...

  5. python 映射表结构_Python 中常见的数据结构:字典、映射和散列表

    在 Python 中,字典是核心数据结构.字典可以存储任意数量的对象,每个对象都由唯一的字典键标识. 字典通常也被称为映射.散列表.查找表或关联数组.字典能够高效查找.插入和删除任何与给定键关联的对象 ...

  6. 数据结构学习笔记(5.树与二叉树 6.图)

    文章目录 第五章 树与二叉树 树 树的常考性质 二叉树--定义.基本术语 二叉树--常考性质 二叉树--存储结构 二叉树--先序.中序.后序遍历 二叉树--层序遍历 由遍历序列构造二叉树 线索二叉树- ...

  7. 数据结构学习笔记(0X08)--散列表

    一.散列表的由来? 1.散列表来源于数组,它借助散列函数对数组这种数据结构进行扩展,利用的是数组支持按照下标随机访问元素的特性. 2.需要存储在散列表中的数据我们称为键,将键转化为数组下标的方法称为散 ...

  8. 【Java】 大话数据结构(13) 查找算法(4) (散列表(哈希表))

    本文根据<大话数据结构>一书,实现了Java版的一个简单的散列表(哈希表). 基本概念 对关键字key,将其值存放在f(key)的存储位置上.由此,在查找时不需比较,只需计算出f(key) ...

  9. 【细谈数据结构】最最最详细的散列表(哈希表)讲解!!!(一)

    细谈散列表系列一共有三篇文章 1.散列表的概述 2.散列函数的作用与构造 3.散列表查找的代码实现 文章目录 细谈散列表系列一共有三篇文章 本篇的重点是,散列表的概述 1.什么是散列表? 2.散列表是 ...

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

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

最新文章

  1. python udp 直播_[Python] socket发送UDP广播实现聊天室功能
  2. Hibernate: Encountered a duplicated sql alias [] during auto-discovery of a native-sql
  3. redis高并发原理_Java中的42行代码中的URL缩短服务— Java(?!)Spring Boot + Redis...
  4. 网络推广网站总结降低网站跳出率的技巧有哪些?
  5. 各国分析之-土耳其土库曼斯坦
  6. 怎么在服务器上注册vbs组件,Windows下查看PC服务器硬件序列号的vbs脚本
  7. thymeleaf 中文_springboot 整合 thymeleaf(上手即用)
  8. yield next和yield* next的区别
  9. C# 修改配置文件进行窗体logo切换
  10. 山东省102021年普通高考成绩查询,山东高考成绩今日发布!成绩查询看这里!
  11. 风口更需冷静 智能家居如何跨越鸿沟?
  12. 不能创建对象qmdispatch_XP突然弹出“automation 服务器不能创建对象”的有效解决方法...
  13. 结对项目--地铁出行路线规划程序(续)——附加题
  14. Jupyter Lab在线运行矩池云教程
  15. 使用网易云api、Vue 和swiper实现轮播图 (音乐app项目-第2步)
  16. 企业网站建设流程步骤,教你快速建网站
  17. python爬取58同城租房信息
  18. SQL Server 沿用上一日的数据
  19. Taste/Thoth:Taste Architecture 概览【转Beyond Search】
  20. Python程序员私活来源:大学同窗开公司,伸手就要爬资料

热门文章

  1. 决策树CART 代价复杂度剪枝
  2. 从哪里寻找游戏工具集(Game dev toolset)开发的资料?
  3. Ajax回调函数中return不生效问题
  4. 龙芯3A3000上实现BLFS的轻量级桌面LXDE
  5. 主板电源开关接口图解_【转】图解:各种主板接线方法 主板电线接法(电源开关、重启等)...
  6. Cadence PSpice 仿真3: 电容器充放电瞬态仿真图文教程
  7. sncr脱硝技术流程图_脱硝技术介绍(SCR和SNCR)
  8. 红米k40关闭开发者模式教程介绍
  9. 微信授权就是这个原理,Spring Cloud OAuth2 授权码模式
  10. 验证牛顿公式的局部收敛性,并找到对于牛顿公式不收敛(发散)的函数,比较二分法与牛顿公式的收敛速度