数据结构

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. 智能车竞赛技术报告 | 智能车视觉 - 新余学院 - 开放艺术队
  2. CSS3支持box-flex弹性布局
  3. SharePoint2007 配置MOSS基于AD的Forms验证
  4. 实现option上下移动_JS实现Select的option上下移动的方法
  5. 大型K8s沙龙来啦,火速报名——Kubernetes Cloud Native Meetup
  6. 基于RNGCryptoServiceProvider的洗牌算法
  7. 网页游戏开发秘笈 PDF扫描版
  8. bmd硬盘测试_Blackmagic Disk Speed Test for Mac(硬盘测速工具)v3.2免费版
  9. cnpm : 无法加载文件 C:\Users\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本。的解决方案之一
  10. 2022最新WiFi大师小程序3.0.9源码+独立版后台
  11. 什么叫横向比较和纵向比较
  12. 风控术语手册(银行_消费金融信贷业务)_version6
  13. Zipf's law分析
  14. 虚拟机配置windows7+office2010
  15. 如何设置路由器并利用路由器+宽带猫实现单机或是多机共享自动拨号上网
  16. 【项目经验】--环保项目
  17. 推荐到Oracle YEP计划
  18. 2021CCPC上海省赛题解ABCDEGHIJK
  19. 高防CDN有什么优点
  20. 机器学习-周志华教授

热门文章

  1. 磁盘相关:磁盘IO、扇区、块与页
  2. [Python/转载]Python 100 Day : 初识Python
  3. 积分学在计算机行业的应用,浅谈积分激励在计算机项目教学中的应用.doc
  4. 中医针灸学综合练习题库【6】
  5. IDM Trial Reset下载|InternetDownloadManager无限试用工具下载
  6. Python·os.path.abspath和os.path.realpath区别
  7. 计算机专业在创新方面的表现,计算机专业本科论文
  8. 华为鸿蒙公测尝鲜,华为鸿蒙尝鲜测试正式开始,分三种形式
  9. 责任链模式实践之Zuul责任链模式
  10. 表格无法无法计算机,电脑为什么不能新建excel表格怎么办