数据结构

1.1 基本概念

在计算机中,数据结构就是指 计算机中描述和存储数据的方式,主要是描述数据元素之间的逻辑关系以及在计算机的存储形式。

通常情况下,数据结构的选择会影响到程序的运行效率(时间复杂度)以及程序的存储效率(空间复杂度)。

计算机程序 = 数据结构 + 算法

1.2 基本分类/层次结构

(1)逻辑结构 - 抽象层

主要描述数据元素之间的逻辑关系。

(2)物理结构 - 结构层

主要描述数据元素之间的位置关系,在计算机中的存储形式。

(3)运算就诶够 - 实现层

主要描述如何实现该结构以及该结构的基本操作。

1.3 逻辑结构的分类

(1) 集合落结构

主要描述所有的数据元素都属于一个总体,不强调元素之间的关系。

如:

23 5 7 10 ... 统称位质数/素数

(2) 线性结构

主要描述所有的数据元素之间存在一对一的关系的前后关系,除了第一个元素外,每个元素都有一个前趋元素,除了最后一个元素外,每个元素都有一个后继元素。

如:

公交站牌的排队       手链

(3)树形结构

主要描述元素之间存在一对多的关系,其中起始元素称为根元素,末尾/顶端的元素称为叶元素,除了根元素之外,每个元素都有且只有一个前趋元素,除了叶元素之外,每个元素都可以有多个后继元素。

如:

树   家谱

(4)网状结构

主要描述数据元素之间存在多对多的一个交叉关系,也叫做图形结构,每个元素都可以有多个前趋元素和多个后继元素。

如:

网球拍  蜘蛛网

1.4 物理结构的分类

(1)顺序存储结构

顺序存储结构就是指使用一组连续的存储单元依次存储逻辑上相邻的多个元素。如果每个元素的数据类型相同,则存储每一个数据元素的存储空间也相同。

如使用C语言中的数组来加以描述。

优点:

1)节省存储空间,因为不需要申请额外的存储空间来表达数据元素之间的逻辑关系,只需要存储数据本身的空间即可。

2)支持下标访问,实现随机访问。

缺点:

1)申请存储空间需要指定明确的大小,可能不够也可能浪费存储空间。

2)顺序存储结构要求必须是连续的内存存储空间,所以存储空间的利用率比较       低。

3)在顺序存储结构中插入/删除元素时,可能需要移动大量的元素。

(2)链式存储结构

链式存储结构就是指使用一组不连续的存储单元依次存储各个元素,也就是说不要求逻辑上相邻的元素在物理位置上也相邻。

链式存储结构中将每个元素存放在彼此独立的存储单元中,该存储单元称为节点,但是为了让这些节点之间有联系,则需要在每一个节点中增加一个指针,该指针用于记录下一个节点的地址,于是所有的节点就被连接起来了。

绝大多数编程语言(如:C语言)中并没有提供对应的数据类型来描述链式存储结构,一般都需要手动编码实现。

优点:

1)申请存储空间时不需要一次性指定大小,可以随时使用随时申请。

2)不需要申请连续的存储空间,也就是说存储空间的利用率比较高。

3)插入/删除元素比较方便,不需要移动大量的元素。

缺点:

1)虽然克服顺序存储结构预知元素个数的缺点,但是每一个节点中需要增加指针变量来记录下一个节点的地址,因此总体存储空间的开销会比较大。

2)不支持下标访问,也不能实现随机访问。

1.5 逻辑结构和物理结构的关系

每种逻辑结构采用何种物理结构来实现并没有明确的规定,甚至某些特殊情况下,同一种逻辑结构可能需要多种物理结构配合来实现。

1.6  运算结构

(1)创建与 销毁

分配资源实现创建 => 建立数据结构 => 销毁占用资源。

(2)插入和 删除

向数据结构中增加元素 和 从数据结构中减少元素。

(3)修改和 查找 以及排序

修改元素的值 使用查找算法 和 排序算法。

【随堂笔记】数据结构基础相关推荐

  1. 前端算法笔记-数据结构基础

    前言 打算从0开始,用JavaScript刷题. 买了修言老师的小册子:前端算法与数据结构面试:底层逻辑解读与大厂真题训练 希望每天下班之后可以看一篇,争取早日上岸吧~ 数据结构 我的想法:不同语言对 ...

  2. linux随堂笔记_day01_linux基础以及常见命令

    文章目录 1 目录(文件夹)常用命令 1.1创建文件夹的命令-mkdir 1.2删除文件夹的命令(谨慎使用,谨慎使用,谨慎使用)-rm 1.3修改文件夹的命令-mv 1.4查询文件夹的命令-ls_ll ...

  3. 一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记

    一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记 教程与代码地址 P1 出圈了!讲课之外我们来聊聊 ...

  4. JAVA历险记--java基础知识--随堂笔记

    JAVA基础知识随堂笔记 简介 学习视频 题1 题2 答疑 简介 由于本人从事Delphi(很古董的语言了)和c#开发,所以一些基础的知识还是比较了解的,需要熟悉的是IDE的简单操作,以及JAVA的相 ...

  5. winsever服务系统基础教程(随堂笔记)

    本文草稿链接https://www.yuque.com/docs/share/000c4611-fa69-4881-90f4-d35ace0f9d26?# <winsever服务系统基础教程(随 ...

  6. MySQL学习笔记-从基础到进阶

    MySQL自学笔记 MySQL 基础 SQL SQL通用语法 SQL分类 DDL数据操作 数据类型 DML数据操作 DQL数据操作 DCL数据控制 函数 约束 多表查询 事务 进阶 存储引擎 **索引 ...

  7. 【数据分析与挖掘】数据分析学习及跟课学习 | csdn_Part 02 数据结构基础

    依旧是整理笔记的一天,纸质笔记为了简便很多东西没有完全写上,一些小练习也没跟上,再进行练习的时候好像有点问题.尽量打字熟悉吧,并且对于这方面知识可以以专业角度去深挖,不要仅限于分析的理论层面.另外数据 ...

  8. 极客时间 Redis核心技术与实战 笔记(基础篇)

    Redis 概览 Redis 知识全景图 Redis 问题画像图 基础篇 基本架构 数据结构 数据类型和底层数据结构映射关系 全局哈希表 链式哈希解决哈希冲突 渐进式 rehash 不同数据结构查找操 ...

  9. Java学习笔记之基础篇

    Java学习笔记之基础篇 目录 Java如何体现平台的无关性? 面向对象(OO)的理解 面向对象和面向过程编程的区别 面向对象三大特征 静态绑定和动态绑定(后期绑定) 延伸:类之间的关系 组合(聚合) ...

  10. 【笔记】嵌入式C语言随堂笔记

    喏,你们要的嵌入式C语言随堂笔记,丰富度应该要比老师自己记录的高一些.但是机酱的废话一样很多哦! 这个笔记是自己一个字一个字手打的,话说打个原创图个慰藉没问题的吧=.= 而且那时候很菜,知道就好不许说 ...

最新文章

  1. 算法训练_ALGO14_回文数
  2. Fiddler抓包使用教程-基本功能介绍
  3. 使用SWAGGER和ASP.NET CORE设置可选路由参数
  4. LeetCode MySQL 1179. 重新格式化部门表
  5. 飞鸽-http://www.freeeim.com/
  6. 69.Daily Temperatures(日常气温)
  7. Bind Service 不会在后台无限期的一直运行
  8. C++ 面向对象 —— 实用程序片段
  9. Eclipse在当前行之上插入一行
  10. Android Studio模拟器磁盘空间不足(Not enough disk space to run AVD)
  11. DB2百度网盘下载的地址
  12. 用Photoshop抠图
  13. 4.服务器的品牌和型号
  14. 让 Windows XP 不用输入密码自动登录
  15. VIVADO调用MIG产生DDR3时实例化遇到的问题以及解决方法
  16. 记录第一次因为技术出差(自嘲一番吧)
  17. 为什么会有高防CDN的出现?
  18. kettle基本概念
  19. fatal error vips vips8 file not found 完美解决方法
  20. 关于“灵魂”和“躯体”,上汽的回复其实是行业“标准答案”

热门文章

  1. Apache Commons-pool2使用入门
  2. 我的时间管理之一 ——做好规划
  3. KMeans聚类 K值的确定以及初始类簇中心点的选取
  4. Vitis 加速环境简介
  5. centos下安装anaconda、scikit-learn、opencv、pytorch 和torchvision(文件在Windows下载好linux版本,使用xshll传到linux)
  6. 点投影到平面上的方法总结
  7. Java模拟Post 提交表单数据
  8. php 面试,PHP 经典面试题集
  9. 刷脸支付连锁化经营的商业形态完美融合
  10. 华为2018年机试练习题[java版]