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

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


文章目录

  • 📋前言
  • 一. 数组结构起源
  • 二. 基本概念和术语
    • 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


📝全文总结

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Rust-语句和表达式

if-else Rust中if-else表达式的作用是实现条件分支。if-else表达式的构成方式为:以if关键字开头,后面跟上条件表达式,后续是结果语句块,最后是可选的else块。条件表达式的类型必须是bool。 if-else结构还可以当表达式使用 loop …

苹果手机怎么恢复备份?详细攻略为你整理好了!

随着智能手机和互联网的普及,手机中存储的个人信息、照片、视频、聊天记录等数据会变得越来越多。一旦手机丢失、损坏或系统出现问题,我们很可能会面临数据丢失的风险。因此,越来越多的人开始意识到保护手机数据的重要性。 当苹果手机数据丢…

Mnajora 使用deb包安装软件

说明 Mnajora 安装deb软件包主要有两种方式 可以使用dpkg 直接安装也可是使用debtap将deb软件包转换成 使用dpkg sudo pacman -S dpkg #安装dpkgsudo dpkg -i ###.deb #使用dpkg安装deb软件包和在ubuntu上是一样的 安装成功 使用debtap debtap是一个用于将.deb包转换为A…

C++力扣题目617--合并二叉树

给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠&#…

“+”连接符用法(Java)

""可以作为连接符使用,如果与字符串一起运算,结果依旧是一个字符串 比如"aaa"6 --> "aaa6" 在打印中,能算就算,不能计算的时候就会连接在一起 注意先后顺序 ascii编码: 字符串&…

VASP结合vaspkit+ShengBTE计算热电优值(一)

电导率σ,塞贝克系数S的计算: 使用vaspkit计算处对应的物理量,具体流程为: 准备好计算的材料对应的POSCAR。如果是二维材料可以使用vaspkit 的921或923功能对二维材料POSCAR进行标准化。进行结构优化。使用 vaspkit-681命令生成高…

卡尔曼滤波:理论与代码

卡尔曼滤波:理论与代码 引言 卡尔曼滤波是一种用于估计系统状态的优化技术,特别适用于含有噪声的测量数据和系统动态变化的情况。本文将简单探讨卡尔曼滤波的理论基础、数学公式的推导,并通过Python代码示例演示其在实际应用中的效果。 一…

python,序列的切片

序列的切片就是指从一个序列中取出子序列 语法: 序列[起始下标:结束下标:步长] 步长为1表示一个一个的取元素,步长为2表示每次跳过一个元素的取元素,步长为负数表示反向切片,取元素时取到结束下标&#…

养老数据监控大屏:护航金色晚年,打造智慧养老新标杆

随着老龄化社会的加速到来,养老服务的质量和效率成为了社会关注的焦点。如何运用现代科技手段提升养老服务水平,让老年人享受更加舒适、便捷的晚年生活,成为了我们面临的重要课题。在这一背景下,养老数据监控大屏应运而生&#xf…

2-《Java并发编程实战》(Java Concurrency in Practice) 代码示例

说明 这是针对《Java并发编程实战》(Java Concurrency in Practice)一书中的示例代码进行扩展,并且进行验证的完整代码,具体背景可看这篇文章:1-《Java并发编程实战》(Java Concurrency in Practice) 代码示例 下面的示例代码都是针对书中的&…

API对象上千个,有啥关联性,kubectl-tree一键搞定

关注【云原生百宝箱】公众号,获取更多云原生消息 "kubectl-tree 是一款强大的 kubectl 插件,通过 ownerReferences 实现 Kubernetes 对象之间的所有权关系探索。相较于 kubectl lineage,它不仅更全面理解 API 对象的逻辑关系&#xff0c…

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

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

超声波眼镜清洗机清洗眼镜会有伤害吗?适合洗眼镜超声波清洗机

眼镜作为日常生活中不可或缺的辅助视力工具,经常需要清洁保养以确保视力清晰和舒适佩戴。随着科技的发展,超声波眼镜清洗机成为越来越受欢迎的清洁方式。然而,很多人可能会担心使用超声波清洗机是否会对眼镜造成损害。但是可以很可以的告诉大…

基于cy7c68013的逻辑分析仪nanoDLA全套软件linux下编译测试

0. 环境 - win10 - ubuntu22 - nanoDLA 提前获取到源码:-> 浏览器打开 https://github.com/wuxx/nanoDLA -> Download as zip. 硬件就直接用taobao买到的,原理图是 1. win10出厂测试 1.1 安装pulseview nanoDLA-master\software\pulseview-0.4.…

深度学习烦人的基础知识(2)---Nvidia-smi功率低,util高---nvidia_smi参数详解

文章目录 问题现象解释解决方案 磨刀不误砍柴工--nvidia-smi参数解读 问题 如下图所示,GPU功率很低,Util占用率高。这个训练时不正常的! 现象解释 Pwr是指GPU运行时耗电情况,如图中GPU满载是300W,目前是86W与GPU2的…

【LeetCode:530. 二叉搜索树的最小绝对差 | 二叉搜索树】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Java--Spring项目生成雪花算法数字(Twitter SnowFlake)

文章目录 前言步骤查看结果 前言 分布式系统常需要全局唯一的数字作为id,且该id要求有序,twitter的SnowFlake解决了这种需求,生成了符合条件的这种数字,本文将提供一个接口获取雪花算法数字。以下为代码。 步骤 SnowFlakeUtils …

1Panel应用推荐:AList开源文件列表工具

1Panel(github.com/1Panel-dev/1Panel)是一款现代化、开源的Linux服务器运维管理面板,它致力于通过开源的方式,帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用,1Panel特别开通应用商店&am…

C++力扣题目700--二叉搜索树中的搜索

给定二叉搜索树(BST)的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。 示例 1: 输入:root [4,2,7,1,3], val 2 输出:[2,1,…

131本!2023中科院分区晋升1区期刊名单出炉

2023年12月27日,中科院分区正式发布《2023年中国科学院文献情报中心期刊分区表》。今年期刊分区表包括SCIE、SSCI、A&HCI,以及ESCI中国期刊,共设置了包括自然科学、人文科学和社会科学在内的21个大类。 关注公众号“Unionpub学术”&…