数据结构初探:揭开数据结构奥秘

在这里插入图片描述
🌈个人主页:聆风吟
🔥系列专栏:数据结构、算法模板、汇编语言
🔖少年有梦不应止于心动,更要付诸行动。


文章目录

  • 📋前言
  • 一. 数组结构起源
  • 二. 基本概念和术语
    • 2.1 数据
    • 2.2 数据元素
    • 2.3 数据项
    • 2.4 数据对象
    • 2.5 数据结构
  • 三. 逻辑结构和物理结构
    • 3.1 逻辑结构
    • 3.2 物理结构
  • 四. 数据类型
    • 4.1 数据类型的定义
    • 4.2 抽象数据类型
  • 📝全文总结

📋前言

    💬 文章主要介绍:本系列主要对数据结构的进行由浅入深的讲解,希望对你今后的学习有一定的帮助。如果有发现错误的地方还请在评论区告知,非常感谢!
    📚 系列专栏:本期文章收录在《图解数据结构》,大家有兴趣可以浏览和关注,后面将会有更多精彩内容!
    🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝



一. 数组结构起源

摘录:
    早期人们都把计算机理解为数值计算工具,就是感觉计算机当然是用来计算的,所以计算机解决问题,应该是先从具体问题中抽象出一个适当的数据模型,设计出一个解此数据模型的算法,然后再编写程序,得到一个实际的软件。可现实中,我们更多的不是解决数值计算的问题,而是需要一些更科学有效的手段(比如表、树和图等数据结构)的帮助,才能更好地处理问题。所以:
    数据结构是一门研究非数值计算的程序设计问题的操作对象,以及他们之间的关系和操作等相关问题。

    1968年,美国的高德纳(Donald E. Knuth)教授在其所写的《计算机程序设计艺术》第一卷《基本算法》中,较系统地阐述了数据的逻辑结构和存储结构及其操作,开创了数据结构的课程体系。同年,“数据结构” 作为一门独立的课程,在计算机科学的学位课程中开始出现。也就是说,那之后计算机相关专业的学生开始接受“数据结构”的“折磨”——其实应该是享受才对。

    之后,20世纪70年代初,出现了大型程序,软件也开始相对独立,结构程序设计成为程序设计方法学的主要内容,人们越来越重视“数据结构”,认为 程序设计的实质是对确定的问题选择一种好的结构,加上设计一种好的算法。可见,数据结构在程序设计当中占据了重要的地位。
在这里插入图片描述



二. 基本概念和术语

2.1 数据

    数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别的,并输入给计算机处理的符号集合。 数据不仅仅包括整形、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。

2.2 数据元素

    数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。 比如在人类中,人是数据元素;在禽兽类中,牛、马、鸡等动物都是禽兽类的数据元素。
在这里插入图片描述

2.3 数据项

    数据项:一个数据元素可以由若干数据项组成。数据项是数据不可分割的最小元素。 比如人这样一个数据元素,可以有眼睛、耳朵、鼻子、嘴巴、手、脚这些数据项,也可以有名字、年龄、性别、家庭地址、联系电话、邮政编码、等数据项,具体有哪些数据项有你来决定。
在这里插入图片描述

2.4 数据对象

    数据对象:是性质相同的数据元素的集合,是数据的子集。其中,性质相同是指数据元素具有相同的数量和类型的数据项。

2.5 数据结构

    以上是关于数据的定义。结构的定义是:不同数据数据元素之间不是相互独立的,而是存在特定关系,我们称这些关系为结构。介绍了数据和结构的定义,那数据结构的定义呢?

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合



三. 逻辑结构和物理结构

    按照视点的不同,我们把数据结构分为逻辑结构和物理结构。

3.1 逻辑结构

    逻辑结构:是指数据对象中数据元素的之间的相互关系。逻辑结构分为一下四种:

  1. 集合结构
    集合结构:集合结构中的数据元素除了同属于一个集合外,他们之间没有其他关系。如下图所示:
    在这里插入图片描述

  2. 线性结构
    线性结构:线性结构中的数据元素之间是一对一的关系。如下图所示:
    在这里插入图片描述

  3. 树形结构
    树形结构:树形结构中的数据元素存在一种一对多的层次关系。如下图所示:
    在这里插入图片描述

  4. 图形结构
    图形结构:图形的数据元素是多对多的关系。如下图所示:
    在这里插入图片描述

注意事项: 用示意图表示数据的逻辑时,需要注意一下两点:

  • 将每一个数据元组看作一个结点,用圆圈表示;
  • 元素之间的逻辑关系用结点之间的连线表示,如果这个关系是有方向的,那么用带箭头的连线表示。

3.2 物理结构

    物理结构(在很多书中也称存储结构):是指数据的逻辑结构在计算机中的存储形式。数据元素的存储结构形式有两种:顺序存储和链式存储。

  1. 顺序存储结构
    顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。如下图所示:
    在这里插入图片描述

  2. 链式存储结构
    链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。因为数据元素的存储关系并不能直接反映其逻辑关系,因此需要用一个指针存放数据元素的地址,这样通过地址就可以找到相数据元素的位置。如下图所示:
    在这里插入图片描述



四. 数据类型

    数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称

4.1 数据类型的定义

    数据类型是按照值的不同进行划分的。在高级语言中,每个变量、常量和表达式都有各自的取值范围。类型就是用来说明变量或表达式的取值范围和所能进行的操作。在c语言中,按照值的不同,数据可以分为两类:

  • 原子类型
    原子类型是不可以在分解的基本类型,包括整型、实型、字符型等
  • 结构类型
    结构类型是由若干个类型组合而成,是可以再分解的。例如,整型数组是由若干整型数据组合而成

4.2 抽象数据类型

    抽象数据类型(Abstract Data Type,ADT)是指一个数学模型及定义在该模型上的一组操作。抽象类型的定义取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。

    实际上,抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性。抽象数据类型把实际生活中的问题分解为多个规模小且容易处理的问题,然后建立一个计算机能处理的数据模型,并把每个功能模块的实现细节作为一个独立的单元,从而使具体实现过程隐藏起来。
    抽象数据类型的标准格式:

ADT 抽象数据类型名
Data数据元素之间的逻辑关系的定义
Operation操作 1初始条件操作结果描述操作 2......操作 n......endADT


📝全文总结

    本文主要讲解了数据结构的起源、基本概念、数据结构的分类等相关基础知识,意在让大家对数据结构有个初步了解,为后面的学习打下基础。

     今天的干货分享到这里就结束啦!如果觉得文章还可以的话,希望能给个三连支持一下,聆风吟的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是作者前进的最大动力!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/618259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux第27步_在虚拟机中安装“设备树编译工具”

设备树英文名字叫做Device tree,用来描述板子硬件信息的,比如开发板上的 CPU有几个核 、每个CPU核主频是多少,IIC、SPI这些外设的寄存器范围是多少,IIC接口下都挂了哪些设备等等。 设备树文件是一种文本格式的文件,方…

小程序中滚动字幕

需求&#xff1a;在录像时需要在屏幕上提示字幕&#xff0c;整体匀速向上滚动 html部分&#xff1a; <view class"subtitles_main"><view style"font-size:34rpx;color: #fff;line-height: 60rpx;" animation"{{animation}}">人生的…

React16源码: React中的schedule调度整体流程

schedule调度的整体流程 React Fiber Scheduler 是 react16 最核心的一部分&#xff0c;这块在 react-reconciler 这个包中这个包的核心是 fiber reconciler&#xff0c;也即是 fiber 结构fiber的结构帮助我们把react整个树的应用&#xff0c;更新的流程&#xff0c;能够拆成每…

对git中tag, branch的重新理解

1. 问题背景 项目中之前一个tag&#xff08;v1.0&#xff09;打错了&#xff0c;想删除它&#xff0c;但我们从此tag v1.0中迁出新建分支Branch_v1.0,在此分支下修复了bug&#xff0c;想重新打一个tag v1.0&#xff0c;原来的tag v1.0可以删除掉吗&#xff1f; 错误的理解&am…

Mysql如何优化慢查询

如何优化慢查询 慢 SQL 的优化&#xff0c;主要从两个方面考虑&#xff0c;SQL 语句本身的优化&#xff0c;以及数据库设计的优化。 1、避免不必要的列 覆盖索引会导致回表&#xff0c;且增大了IO 2、分页优化 深分页解决方案 使用子查询in 使用连接表 left join 使用游标&a…

计算机毕业设计-----SSH计算机等级考试报名系统

项目介绍 该项目分为前后台&#xff0c;分为管理员与普通用户两种角色&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,修改个人密码&#xff0c;院系信息管理&#xff0c;注册用户管理&#xff0c;留…

JAVA数组以及小练习

目录 数组的概述和静态初始化 数组的地址值和元素访问 数组的遍历 数组的动态初始化 数组练习 数组的概述和静态初始化 package 数组;public class array1 {public static void main(String[] args){//格式//静态初始化//数据类型 [] 数组名 new 数组类型[]{元素1&#xf…

java期末复习题

1.任何一个Java程序都默认引入一个包&#xff0c;这个包的名字是________________。 正确答案&#xff1a;java.lang Java程序默认引入的包是java.lang包。这个包是Java语言的核心&#xff0c;它提供了Java中的基础类&#xff0c;包括基本Object类、Class类、String类、基本类…

【模块系列】STM32BMP280

前言 最进想练习下I2C的应用&#xff0c;手上好有BMP280也没用过&#xff0c;就看着机翻手册和原版手册&#xff0c;开始嘎嘎写库函数了。库的命名应该还1是比较规范了吧&#xff0c;就是手册对于最终值的计算方式很迷糊&#xff0c;所以现在也不能保证有可靠性啊&#xff0c;大…

磁盘直通卡/阵列卡讲解

服务器SAS卡 ① 华为SR120 (LSI 2308 6Gb SAS直通卡),适合数据安全等级不高或 更换简单 硬盘即插即用 ② 华为SR320 (LSI 2208 6Gb SAS阵列卡 带512M缓存),适合对数据安全等级要求高或追求磁盘性能的客户 推荐上阵列卡 ③ 华为SR130 (LSI 3008 12Gb SAS直通卡),适合数据安全等…

【Spring 篇】深入探索:Spring集成Web环境的奇妙世界

嗨&#xff0c;亲爱的小白们&#xff01;欢迎来到这篇有关Spring集成Web环境的博客。如果你曾对如何在Spring中构建强大的Web应用程序感到好奇&#xff0c;那么这里将为你揭示Web开发的神秘面纱。我们将用情感丰富、语句通顺的文字&#xff0c;以小白友好的方式&#xff0c;一探…

Mac M2芯片pycharm配置conda python环境

Mac M2芯片pycharm配置conda python环境 详细步骤如下 1、pycharm界面右上方的小齿轮⚙️&#xff0c;进入Setting…状态 2、进入setting界面后&#xff0c;选择左边栏的Project-->python Interpreter,然后选择右边的Add Interpreter 3、进入Add Interpreter后&#xff0c…

竞赛保研 基于深度学的图像修复 图像补全

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学的图像修复 图像补全 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-se…

内网穿透远程访问

内网穿透远程访问 参考文章&#xff1a;https://blog.csdn.net/qyj19920704/article/details/135528078#comments_30865140 cpolar概述 使用了 cpolar 生成的隧道&#xff0c;其公网地址是随机生成的。 优势在于建立速度快&#xff0c;可以立即使用。然而&#xff0c;它的缺…

selenium模拟浏览器查询导出参考文献

通过使用Selenium和BeautifulSoup&#xff0c;在CNKI网站上&#xff0c;以"知识图谱"为关键词&#xff0c;通过自动化工具在搜索页面提取相关文章信息。点击清楚并全选进行文献导出&#xff0c;随后从导出页面和管理导出的页面提取参考文献。 浏览器及WebDriver下载…

postgresql迁移到mysql

1.工具方法&#xff1a;Navicat Premium16 2. 手工方法&#xff1a; 迁移流程 下面是将 Postgresql 数据库迁移到 MySQL 的步骤流程&#xff1a; 步骤描述1. 创建MySQL表结构在MySQL中创建与Postgresql中的表结构相同的表2. 导出Postgresql数据将Postgresql中的数据导出为SQ…

评估指标中的RMSE,MAE,MAPE分别表示什么,取值范围一般多大,优缺点有哪些?

评价指标 1. RMSE&#xff08;Root Mean Square Error&#xff09;&#xff1a;均方根误差2. MAE&#xff08;Mean Absolute Error&#xff09;&#xff1a;平均绝对误差&#xff0c;也叫均方误差3. MAPE&#xff08;Mean Absolute Percentage Error&#xff09;&#xff1a;平…

第九讲 单片机驱动彩色液晶屏 控制RA8889软件:显存操作

单片机驱动TFT彩色液晶屏系列讲座 目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控…

kafka入门(六):日志分段(LogSegment)

日志分段&#xff08;LogSegment&#xff09; Kafka的一个 主题可以分为多个分区。 一个分区可以有一至多个副本&#xff0c;每个副本对应一个日志文件。 每个日志文件对应一个至多个日志分段&#xff08;LogSegment&#xff09;。 每个日志分段还可以细分为索引文件、日志存储…

【Mybatis系列】Mybatis空值关联

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…