数据结构|-常见数据结构整理
归纳总结了一下数据机构的常用类型,个人理解常用的数据机构可以分为线性表、栈、队列、树,线性表包括顺序表和链表,栈和队列应当属于特殊的线性表,有几个概念和误区需要先说一下
顺序表和线性表的关系:
- 线性表是逻辑概念,只要所有的数据在逻辑上是一维的便算是线性表,线性表中数据元素之间的关系是一对一的关系(每个元素首尾相接),比如数组和链表,都是数据一个接一个的线性表。与线性表对应的是树、堆等。
- 顺序表是空间概念,是线性表的顺序存储结构,指的是数据在存储空间上顺序排列,比如数组,数组便是划分一块连续的内存区域用于存储,与顺序表相对应的是链表。
队列、栈和线性表的关系:
- 线性表可以在表中任意位置进行插入、删除等操作。
- 栈是一种特殊的线性表,其逻辑结构和线性表相同,但也有差别,栈被限定为只能在其一端进行插入删除的操作。
- 队列也是一种特殊的线性表,逻辑结构与线性表相同,但操作上有限制,队列限制在表的一端进行插入,在表的另一端进行删除。
数组、链表、栈、队列、哈希表、树、图、堆
数组
数组是可以在内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。
优点:
- 按照索引查询元素速度快
- 按照索引遍历数组方便
缺点:
- 数组的大小固定后就无法扩容了
- 数组只能存储一种类型的数据
- 添加,删除的操作慢,因为要移动其他的元素。
适用场景:
频繁查询,对存储空间要求不大,很少增加和删除的情况。
链表
链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。
链表的优点:
- 链表是很常用的一种数据结构,不需要初始化容量,可以任意加减元素;
- 添加或者删除元素时只需要改变前后两个元素结点的指针域指向地址即可,所以添加,删除很快;
缺点:
- 因为含有大量的指针域,占用空间较大;
- 查找元素需要遍历链表来查找,非常耗时。
适用场景:
数据量较小,需要频繁增加,删除操作的场景
PS:C#中没有链表,根本原因是 .net 框架中出于安全考虑取消了指针类型,因此也就没有链表了。而事实上,数组和哈希表的组合在各方面都不输链表,链表也就没有存在空间了。
栈
栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。
栈的结构就像一个集装箱,越先放进去的东西越晚才能拿出来,所以,栈常应用于实现递归功能方面的场景,例如斐波那契数列。
队列
队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出。从一端放入元素的操作称为入队,取出元素为出队,示例图如下:
使用场景:因为队列先进先出的特点,在多线程阻塞队列管理中非常适用。
哈希表
散列表,也叫哈希表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。
记录的存储位置=f(key)
从图中可以看出,左边很明显是个数组,数组的每个成员包括一个指针,指向一个链表的头,当然这个链表可能为空,也可能元素很多。我们根据元素的一些特征把元素分配到不同的链表中去,也是根据这些特征,找到正确的链表,再从链表中找出这个元素。
可以看作是数组和链表的组合。
树
这里仅讨论二叉树,以图加深印象
相关性质
- 二叉树的每个结点至多只有2棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。
- 二叉树的第i层至多有2^(i-1)个结点;深度为k的二叉树至多有2^k-1个结点。
- 一棵深度为k,且有2^k-1个节点的二叉树称之为 满二叉树 ;
- 深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中,序号为1至n的节点对应时,称之为 完全二叉树 。(简单来理解就是依次从左子树一直排过去,有任何一个结点只有右子没左子便不是完全二叉树)
三种遍历(三种遍历很容易搞混,其实只需要顾名思义,先序中序后序就是指的父结点遍历的先后次序,先序:先根后左再右,中序:左根右,后序:左右根)下面的图多跟着走几遍就理解透彻了
图
未完待续……
堆
未完待续……
参考来源:https://blog.csdn.net/yeyazhishang/article/details/82353846、https://www.cnblogs.com/wanghuaijun/p/7302303.html
转载于:https://www.cnblogs.com/wq-KingStrong/p/10278303.html
数据结构|-常见数据结构整理相关推荐
- 常见数据结构与算法整理总结(下)
原文链接:https://www.jianshu.com/p/42f81846c0fb 这篇文章是常见数据结构与算法整理总结的下篇,上一篇主要是对常见的数据结构进行集中总结,这篇主要是总结一些常见的算 ...
- Java笔记整理五(Iterator接口,泛型,常见数据结构(栈,队列,数组,链表,红黑树,集合),jdk新特性,异常,多线程,Lambda表达式)
Java笔记整理五 1.1Iterator接口 Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象 ...
- python常用数据结构_Python常见数据结构整理
Python 常见数据结构详解 这篇文章主要介绍了 Python 常见数据结构 , 需要的朋友可以参考下 本文详细罗列归纳了 Python 常见数据结构,并附以实例加以说明,相信对读者有一定的参 考借 ...
- 笔记整理4----Java语言高级(四)16 JAVA常用API-高级+17 泛型与常见数据结构+18 Map与Set集合+19 异常处理+20 IO流-高级
16 JAVA常用API-高级+17 泛型与常见数据结构+18 Map与Set集合+19 异常处理+20 IO流-高级 第05天 API 今日内容介绍 Object类 & System类 ...
- python中常见的流程结构-常见数据结构的 Python 实现(建议收藏)
数据结构作为计算机基础的必修内容,也是很多大型互联网企业面试的必考题.可想而知,它在计算机领域的重要性. 然而很多计算机专业的同学,都仅仅是了解数据结构的相关理论,却无法用代码实现各种数据结构. 今日 ...
- 常见数据结构的 Python 实现(建议收藏)
数据结构作为计算机基础的必修内容,也是很多大型互联网企业面试的必考题.可想而知,它在计算机领域的重要性. 然而很多计算机专业的同学,都仅仅是了解数据结构的相关理论,却无法用代码实现各种数据结构. 今日 ...
- springboot和vue data数据为空_常见数据结构的 Python 实现(建议收藏)
数据结构作为计算机基础的必修内容,也是很多大型互联网企业面试的必考题.可想而知,它在计算机领域的重要性. 然而很多计算机专业的同学,都仅仅是了解数据结构的相关理论,却无法用代码实现各种数据结构. 今日 ...
- 数据结构知识点总结整理
数据结构知识点总结整理 0.常考基础必知必会 A. 排序:排序有几种,各种排序的比较,哪些排序是稳定的,快排的算法: B. 查找:哈希查找.二叉树查找.折半查找的对比,哈希映射和哈希表的区别? C. ...
- JavaScript 数组拼接打印_8种常见数据结构及其Javascript实现
摘要: 面试常问的知识点啊- 原文:常见数据结构和Javascript实现总结 作者:MudOnTire Fundebug经授权转载,版权归原作者所有. 做前端的同学不少都是自学成才或者半路出家,计算 ...
最新文章
- 洛谷 2 月月赛 I 『MdOI R4』 (Div2) A ~ D 四题全,也许会有六题,超高质量题解 (Div.1E、F下辈子一定补)【每日亿题2 / 9】
- Mapped Statements collection does not contain value for TaskMapper.selectByPrimaryKey
- 安装部署及升级到Exchange Server 2010
- sh文件启动java_shell java应用启动脚本(app.sh)
- Intel RealsenseD435 color图与depth图的两种对齐(align)方式
- Java | 设计模式-适配器模式
- 说一下对象或数组转JSON怎么转【fastjson】
- SE81 - Application hierarchy CSS component tree
- 前端学习(2150):webpack之配置babel
- Python3.x连接MySQL数据库,SQL语句使用方法
- 最新的ndkr20编译c_Android NDK-r20 交叉编译 FFmpeg 4.2
- mysql 拼音首字母_MySQL拼音首字母查询
- ECS Windows服务器通过ie下载提示当前安全设置不允许下载该文件
- mbp touchbar设置_MacBook 个性化你的 Touch Bar
- 【装机】将mbr硬盘转换为gpt
- 【原创】关于Golang和Rust对比及语言的选择思考
- java循环求阶乘_在Java中用循环求阶乘
- lisp 吴永进_采用Visual Lisp软件提高长输管道施工图设计效率
- 第十四章 疯狂Caché 事务处理
- G711转AAC代码总结【转】
热门文章
- JVM中可生成的最大Thread数量
- 递归与非递归转换(栈知识应用)
- HDU1089-1096 A+B for Input-Output Practice 系列问题(输入输出格式练习)
- Ubuntu16.04 配置记录(持续更新)
- apache 2.4 配置php,Apache2.4 PHP 配置
- java课程设计 mysql_Java课程设计---安装解压版mysyql
- Java的反射作用_浅析Java 反射机制的用途和缺点
- mssql mysql 语法区别_mssql与mysql区别之——变量区别
- json qbytearray 串 转_如何通过QByteArray在JSON中存储QPixmap?
- pygame里面物体闪烁运动_教师资格【试讲示范】高中物理试讲答辩——《自由落体运动》试讲稿答辩...