一、数据结构基本概念

数据结构基本概念

  • 一、数据结构基本概念
    • 1.基本概念和术语
      • 1.1数据(Data)
      • 1.2 数据元素(Data element)
      • 1.3 数据项 (Data Item)
      • 1.4 数据对象 (Data Object)
      • 1.5 数据结构 (Data Structure)
        • 1.5.1逻辑结构
          • 1.5.1.1 线性结构
          • 1.5.1.2 非线性结构
          • 1.5.1.3 集合结构
          • 1.5.1.4 线性结构
          • 1.5.1.5 树形结构
          • 1.5.1.6 图状结构或网状结构
        • 1.5.2 存储结构
          • 1.5.2.1顺序存储结构:
          • 1.5.2.2 链式存储结构:
          • 1.5.2.3 索引存储结构;
          • 1.5.2.4 散列存储结构或哈希存储结构:
      • 1.6 数据类型和抽象数据类型
        • 1.6.1 数据类型(Data Type)
        • 1.6.2 抽象数据类型 (Abatract Data Type,ADT)

一、数据结构基本概念

1.基本概念和术语

1.1数据(Data)

  • 是能输入计算机且能被计算机处理的各种符号的集合。

  • 是信息的载体。

  • 是对客观事物符号化的表示。

  • 能够被计算机识别、存储和加工。

      包括:数值型数据:整数、实数等;非数值型的数据:文字、图像、图形、声音等;
    

1.2 数据元素(Data element)

  • 是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理;
  • 也简称为元素,或称为记录、结点或者顶点;
  • 一个数据元素由若干个数据项组成;

表1.1 学生表
|学号|  姓名 |    性别    |     出生日期      |      政治面貌     |
0001	关羽	男	2001.2.3	团员
0002	刘备	男	1999.3.4	党员
0003	张飞	男	2002.6.18	群众

1.3 数据项 (Data Item)

  • 构成数据元素的不可分割的最小单位。

表1.1 学生表
学号	姓名	性别	出生日期	政治面貌
0001	关羽	男	2001.2.3	团员
0002	刘备	男	1999.3.4	党员
0003	张飞	男	2002.6.18	群众

【注】数据、数据元素、数据项三者之间的关系:数据 > 数据元素 > 数据项

1.4 数据对象 (Data Object)

  • 是性质相同的数据元素的集合,是数据的一个子集
    【注】数据元素与数据对象:

  • 数据元素——组成数据的基本单位

      与数据的关系:是集合的个体。
    
  • 数据对象——性质相同的数据元素的集合

      与数据的关系:集合的子集。
    

1.5 数据结构 (Data Structure)

数据结构这门课着重关注的是数据元素之间的关系,和对这些数据元素的操作,而不是关心集体的数据项的内容。
  • 数据元素不是孤立存在的,它们之间存在着某种关系,数据元素相互之间的关系称为结构(Strcture)。
  • 是指相互之间存在一种或多种特定关系的数据元素集合。
  • 或者说,数据结构是带结构的数据元素的集合。

【注】

  • 同样的数据元素,可以组成不同的数据结构;

  • 不同的数据元素,可以组成相同的数据结构。

      数据结构包括以下三个方面的内容:1. 数据元素之间的逻辑关系,也称为逻辑结构2. 数据元素及其关系在计算机内存中的表示(又称为映像),成为数据的物理结构或者数据的存储结构3. 数据的运算和实现,即对数据元素可以施加的操作以及这些操作在相应的存储结构上的实现
    

数据结构的两个层次

1.逻辑结构

  • 描述数据元素之间的逻辑关系
  • 与数据的存储无关,独立于计算机
  • 是从具体问题抽象出来的数据模型

2.物理结构(存储结构)

  • 数据元素及其关系在计算机存储器中的结构(存储方式)
  • 是数据结构在计算机中的表示

3.逻辑结构与存储结构的关系:

  • 存储关系是逻辑关系的映像与元素本身的映像
  • 逻辑结构是数据结构的抽象,存储结构是数据结构的实现
  • 两者综合起来建立了数据元素之间的结构关系
1.5.1逻辑结构

逻辑结构的种类:

划分方式一:

  • 线性结构
  • 非线性结构

划分方式二:

  • 集合结构
  • 线性结构
  • 树形结构
  • 图状结构或者网状结构
1.5.1.1 线性结构

有且只有一个开始和一个终端结点,并且所有节点都最多只有一个直接前驱和一个直接后继。

例如:线性表、栈、队列、串
1.5.1.2 非线性结构

一个结点可能有多个直接前驱和直接后继

例如:树、图
1.5.1.3 集合结构

结构中的数据元素之间除了同属于一个集合的关系外,无任何其他关系

集合结构:由若干个元素组成,没有前驱后继关系,也没有父子关系。通常用于处理不同的数据类型,如包含整数、字符或者任意对象的集合。

在这里插入图片描述

1.5.1.4 线性结构

结构中的数据元素之间存在着一对一的线性关系

线性结构:由若干个数据元素组成,有明显的前驱后继关系,例如数组、链表、栈和队列。其中,数组是连续的内存空间,链表是离散的内存空间。
  • 除了第一个元素,所有元素都有唯一前驱
  • 除了最后一个元素,所有元素都有唯一后继
    在这里插入图片描述
1.5.1.5 树形结构

结构中的数据元素之间存在着一对多的层次关系

树状结构:由若干个节点组成,节点之间有明显的父子关系,根节点是整棵树的入口,叶子节点是没有子节点的节点。常见的树状结构有二叉树、堆、红黑树等等。

在这里插入图片描述

1.5.1.6 图状结构或网状结构

结构中的数据元素之间存在着多对多的任意关系

图结构:由若干个顶点和边组成,边可以是有向或无向的。每个顶点可以有一些相关的属性信息。图结构包括稠密图和稀疏图。稠密图指边数接近于节点数平方,而稀疏图指边数远小于节点数平方。

在这里插入图片描述

1.5.2 存储结构
1.5.2.1顺序存储结构:
  • 用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系有元素的存储位置来表示

      C语言中用数组来实现顺序存储结构
    

顺序存储:顺序存储是将数据元素按照其逻辑顺序连续地存储在一块连续的内存空间中。

	常见的顺序存储结构包括数组和顺序表。数组的元素在内存中是连续存储的,通过索引访问元素速度较快,但插入和删除操作需要移动元素,效率较低。

在这里插入图片描述

1.5.2.2 链式存储结构:
  • 用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示

      C语音中用指针来实现链式存储结构
    

链式存储:链式存储是通过使用指针或引用来连接数据元素,每个元素保存着指向下一个元素的指针。

常见的链式存储结构包括单链表、双链表和循环链表。链式存储结构能够动态地分配内存,插入和删除元素效率较高,但访问元素需要遍历链表从头到尾,效率较低。

在这里插入图片描述

1.5.2.3 索引存储结构;
	1.在存储节点信息的同时,还建立附加的索引表2索引表中的每一项成为一个索引项3.索引项的一般形式为:(关键字,地址)4.关键字是能唯一标识一个结点的那些数据项
  • 若每个节点在索引表中都有一个索引项,则该索引表称之为稠密索引(Dense Index)。
  • 若一组结点在索引表中只对应一个索引项,则该索引表称之为稀疏索引(Sparse Index)。

索引存储:索引存储是在数据记录外部建立附加的索引表,索引表中的每个记录包含两部分:索引项和数据地址。通过索引项可以快速定位到对应的数据。

	常见的索引存储结构包括有序索引、散列索引和倒排索引。索引存储结构通过维护索引表来提高数据的检索速度。

在这里插入图片描述

1.5.2.4 散列存储结构或哈希存储结构:
  • 根据结点的关键字直接计算出该节点的存储地址。

散列存储:散列存储是根据关键字直接计算出数据元素的存储位置,通过查找关键字和对应存储位置进行快速访问。

常见的散列存储结构包括散列表和哈希表。散列存储结构通过散列函数将关键字映射到存储位置,可以实现快速的插入、删除和查找操作。

在这里插入图片描述

1.6 数据类型和抽象数据类型

1.在使用高级程序设计语言编写程序时,必须对程序中出现的每个变量、常量或表达式,明确说明他们所属的数据类型2.一些最基础的数据结构可以用户数据类型来实现,如数组、字符串等3.而另一些常用的数据结构,如栈、队列、树、图等,不能直接用数据类型来表示4.高级语言中的数据类型明显的或隐含的规定了在程序执行期间变量和表达的所有可能得取值范围,以及在这些数值范围上所允许进行的操作

数据类型的作用:

  • 约束变量或常量的取值范围
  • 约束变量或常量的操作
1.6.1 数据类型(Data Type)

定义:数据类型是一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称

数据类型=值的集合+值集合上的一组操作
  • 原子类型:其值不可再分的数据类型

     例如:int类型、bool类型等
    
  • 结构类型:其值可以在分解为若干个成分(分量)的数据类型

    例如:

    // 定义一个具体的结构类型,表示一个坐标信息                                                                                                        
    struct Coordinate{int x;   //横坐标int y;   //纵坐标
    

}

1.6.2 抽象数据类型 (Abatract Data Type,ADT)

定义:是指一个数学模型以及定义在此数学模型上的一组操作

  • 由用户定义,从问题抽象出数据模型(逻辑结构)

  • 还包括定义在数据模型上的一组抽象运算(相关操作)

  • 不考虑计算机内的具体存储结构与运算的具体实现算法

      抽象数据类型的形式定义:抽象数据类型可用(D,S,P)三元组表示其中:D是数据对象;S是D上的关系集;P是对D的基本操作集
    

一个抽象数据类型的定义格式如下:

ADT   抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}ADT  抽象数据类型名
其中:数据对象、数据关系的定义用伪代码描述

基本操作的定义格式为:

  • 基本操作名(参数表)
  • 初始条件:<初始条件描述>
  • 操作结果:<操作结果描述>

基本操作定义格式说明:

  • 参数表: 赋值参数只为操作提供输入值

      引用参数以&打头,除可提供输入之外,还将返回操作结果
    
  • 初始条件:描述操作执行之前数据结构和参数应满足的条件

      若不满足,则操作失败,并返回相对应出错信息。若初始条件为空,则省略之。
    
  • 操作结果:说明操作正常完成之后,数据结构的变化状况和应返回的结果。

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

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

相关文章

基于 Validator 类实现 ParamValidator,用于校验函数参数

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、相关回顾 使用 TypeV…

Every Nobody Is Somebody 「每小人物都能成大事」

周星驰 NFT Nobody即将发售&#xff0c;Nobody共创平台 Every Nobody Is Somebody Nobody 关于Nobody&#xff1a;Nobody是一款Web3共创平台&#xff0c;旨在为创作者提供一个交流和合作的场所&#xff0c;促进创意的产生和共享。通过该平台&#xff0c;创作者可以展示自己的作…

git秘钥过期 ERROR: Your SSH key has expired

文章目录 1、错误提示Your SSH key has expired2、登录Github确认3、重新设置秘钥 1、错误提示Your SSH key has expired 使用git命令时遇到Github 的 SSH Key秘钥过期&#xff0c;提示错误ERROR: Your SSH key has expired 2、登录Github确认 首先登录Github查看&#xff…

某查查请求头参数加密分析(含JS加密算法与Python爬虫源码)

文章目录 1. 写在前面2. 请求分析3. 断点分析4. 扣加密JS5. Python爬虫代码实现 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff…

基于SELinux三权分立配置方法

1.系统安装 系统安装完成后,系统当前的SELinux配置为: # cat /etc/selinux/config SELINUX=enforcing SELINUXTYPE=targeted 2.SELinux环境准备 # yum install setools policycoreutils.x86_64 selinux-policy-mls.noarch setroubleshoot.x86_64 setools-console -y 3.SELin…

手撕单链表(单向,不循环,不带头结点)的基本操作

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

mercury靶机

文章妙语 不与伪君子争名&#xff0c;不与真小人争利&#xff0c;不与执拗人争理&#xff0c;不与匹夫争勇&#xff0c;不与酸儒争才。不与蠢人施恩 一、信息收集 主机探测 端口探测 探测主机详细版本信息 8080开了http服务 目录扫描 robots.txt目录下什么也没有 二&#xff0…

Python | Iter/genartor | 一文了解迭代器、生成器的含义\区别\优缺点

前提 一种技术的出现&#xff0c;需要考虑&#xff1a; 为了实现什么样的需求&#xff1b;遇到了什么样的问题&#xff1b;采用了什么样的方案&#xff1b;最终接近或达到了预期的效果。 概念 提前理解几个概念&#xff1a; 迭代 我们经常听到产品迭代、技术迭代、功能迭代…

零基础学习数学建模——(二)数学建模的步骤

本篇博客将详细介绍数学建模的步骤。 文章目录 引例&#xff1a;年夜饭的准备第一步&#xff1a;模型准备第二步&#xff1a;模型假设第三步&#xff1a;模型建立第四步&#xff1a;模型求解第五步&#xff1a;结果分析第六步&#xff1a;模型检验第七步&#xff1a;模型应用及…

openeuler的安装和两台linux主机配置ssh实现互相免密登陆

一、openeuler的安装 下载OpenEuler - 网址&#xff1a;https://www.openeuler.org/zh/download/archive/ - 版本选择&#xff1a;openEuler 22.03 LTS SP2 &#xff08;镜像文件&#xff09; &#xff0c;即长期更新版 设置自定义硬件 内存&#xff1a;推荐2GB 处理器&…

oracle基本用户管理和权限分配

1.用户与模式的关系&#xff0c;一一对应的关系 2.创建与管理用户 2.1创建用户语法 CREATE user wdf IDENTIFIED by tiger--创建用户wdf,密码tiger DEFAULT tablespace users--用户的默认表空间 quota 10M on users;--在表空间的占用最大空间 注意&#xff1a;用户创建以后…

rke2 Offline Deploy Rancher v2.8.0 latest (helm 离线部署 rancher v2.8.0)

文章目录 预备条件为什么是三个节点&#xff1f;​预备条件配置私有仓库介质清单安装 helm安装 cert-manager下载介质镜像入库helm 部署卸载 安装 rancher镜像入库helm 安装 验证 预备条件 所有支持的操作系统都使用 64-bit x86 架构。Rancher 兼容当前所有的主流 Linux 发行版…

如何通过兴趣爱好选职业?

一个错误的选择&#xff0c;可能造成终身的遗憾&#xff0c;一个正确的选择&#xff0c;可以让我们少奋斗几十年。所以无论现在付出多少代价&#xff0c;多花一些时间&#xff0c;去研究以下未来的职业方向&#xff0c;这是值得的。 职业定位&#xff08;专业定位&#xff09;…

深兰科技AI医疗健康产品获3000台采购订单

12月6日&#xff0c;武汉某企业与深兰科技签署协议&#xff0c;一次性采购3000台深兰科技AI生理健康检测仪——扁鹊。 深兰科技AI生理健康检测仪——扁鹊是深兰科技推出的人体生理指标检测产品。基于AI生物技术、融合互联网医疗及AIoT技术&#xff0c;深兰科技AI生理健康检测仪…

YOLOv8-Seg改进:轻量化改进 | 华为Ghostnet,超越谷歌MobileNet | CVPR2020

🚀🚀🚀本文改进: Ghost bottleneck为堆叠Ghost模块 ,与YOLOV8建立轻量C2f_GhostBottleneck 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教你如何训练YOLOv8-seg; 2)模型创新,提…

HubSpot CRM:卓越客户服务的关键引擎

在数字化时代&#xff0c;提供卓越的客户服务是企业成功的关键之一。HubSpot CRM以其强大的功能和灵活性&#xff0c;成为实现卓越客户服务的关键引擎&#xff0c;以下是强调HubSpot CRM在客户服务中的应用的关键方面&#xff1a; 1. 全面的客户视图 HubSpot CRM集成了全面的…

《路由与交换技术》---练习题(无答案纯享版)

注意&#xff01;&#xff01;&#xff01;这篇blog是无答案纯享版的 选择填空的答案我会放评论区 简答题可以看这里 计算题可以发私信问我&#xff08;当然WeChat也成&#xff09;but回讯息很慢 一、选择题 1.以下不会在路由表里出现的是: ( ) A.下一跳地址 B.网络地址 C…

科大讯飞星火大模型加持数字员工系列产品发布

面对时代浪潮&#xff0c;基业长青的企业总会率先拥抱变化&#xff0c;在时代交替中创造新的增长空间。当数字化浪潮涌入千行百业&#xff0c;企业掌舵者如何选择转型&#xff1f; 从数字员工到灯塔工厂&#xff0c;愈发成熟的人工智能技术已深入企业管理&#xff0c;持续提高…

小白苦恼:电脑那么多USB口,怎么知道哪个读写更快?

前言 最近有个朋友和小白抱怨&#xff1a;电脑那么多USB接口&#xff0c;有些接口在传输文件的时候实在慢的很。 电脑诞生以来&#xff0c;USB接口就一直存在。但是USB接口还是长得几乎一样&#xff0c;不仔细去研究都不知道哪个USB会更快。 许多小伙伴就会直接放弃辨认&…

计算机导论03-计算机组成

计算机系统结构 冯•诺依曼体系结构 冯•诺依曼体系结构的基本要点 冯•诺依曼思想即冯•诺依曼体系结构思想&#xff0c;其最基本的概念是存储程序概念&#xff0c;它奠定了现代计算机的结构基础。 功能部件: 计算机必须具备五大基本组成部件&#xff0c;包括&#xff1a;运…