一、数据结构基本概念

news2025/1/19 2:18:42

数据结构基本概念

  • 一、数据结构基本概念
    • 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.coloradmin.cn/o/1370388.html

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

相关文章

移除两个双向链表中的重复元素,每个链表中的元素不重复

移除两个双向链表中的重复元素&#xff0c;每个链表中的元素不重复&#xff0c;请给出算法。 ans: 该问题比单向链表要更加复杂一些&#xff0c;必须考虑并更新前向节点的指向情况&#xff0c;具体编码中存在一些难度&#xff0c;加上链表调试相对不容易&#xff0c;因此难度系…

Qt之有趣的数字钟

一.效果 基于网络代码修改,支持时、分、秒;支持滑动、翻页和旋转。 二.实现 #include <QtCore> #include <QPainter> #include <QAction> #include <QWidget> #include <QMainWindow> #include <QTimer> #include <QKeyEvent> #…

React ant table警告:Each child in a list should have a unique “key“ prop.

如下图&#xff1a; 原因 React Ant table表格每一行都需要一个唯一标识来确保不重复&#xff0c;如果不加该属性&#xff0c;就会出现这个警告。 修复 添加这一行&#xff1a; rowKey{(record) > record.id} # id为行idTable代码段&#xff1a; <TabledataSourc…

Armv8-R AArch32 architecture概念学习

提示 该博客主要为个人学习&#xff0c;通过阅读官网手册整理而来&#xff08;个人觉得阅读官网的英文文档非常有助于理解各个IP特性&#xff09;。若有不对之处请参考参考文档&#xff0c;以官网文档为准。阅读该文章&#xff0c;可以先查看AArch64 Exception Model学习&…

消息队列-RockMQ-定时延时发送消息

定时延时发送消息 任务需要延迟一段时间再进行处理。 生产者 public class Producer {public static void main(String[] args) throws Exception {DefaultMQProducer producer new DefaultMQProducer("producer_group");producer.setNamesrvAddr("ip:9876&q…

【从零开始学技术】Fiddler 抓取 https 请求大全

1.Fiddler代理浏览器设置 注意浏览器代理区别 Chrome/IE浏览器使用的都是系统代理设置 在chrome浏览器的设置中搜索代理&#xff0c;可以看到 打开IE浏览器&#xff0c;选择设置->Internet选项 Firefox浏览器使用的是单独的一套代理系统 在Firefox的代理设置中&#xff0c;我…

hadoop自动获取时间

1、自动获取前15分钟 substr(from_unixtime(unix_timestamp(concat(substr(20240107100000,1,4),-,substr(20240107100000,5,2),-,substr(20240107100000,7,2), ,substr(20240107100000,9,2),:,substr(20240107100000,11,2),:,00))-15*60,yyyyMMddHHmmss),1) unix_timestam…

sentinel熔断简单实现

sentinel详细介绍网址 基于qps限流 package mainimport ("fmt"sentinel "github.com/alibaba/sentinel-golang/api""github.com/alibaba/sentinel-golang/core/base""github.com/alibaba/sentinel-golang/core/flow""log"…

CMake入门教程【核心篇】设置和使用缓存变量

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 概述设置缓存变量使用缓存变量更改缓存变量完整代码示例实战使用技巧注意事项总结与分析

STM32-04-STM32时钟树

STM32时钟树 什么是时钟&#xff1f; 时钟是具有周期性的脉冲信号&#xff0c;最常用的是占空比50%的方波。&#xff08;时钟是单片机的脉搏&#xff0c;搞懂时钟走向及关系&#xff0c;对单片机使用至关重要&#xff09;。 时钟树 时钟源 2个外部时钟源 高速外部振荡器(HSE…

Lava多模态大模型调试(基于vscode框架)

文章目录 前言一、整体概括二、launch.json文件配置三、调试展示前言 之前博客这里介绍LLava1.5多模态大模型的安装、训练、预测等。但对于你想查看源码或多或少都有些麻烦,也不利于代码调试。基于此,本文是一篇基于vscode框架调试llava大模型的教程。 一、整体概括 我是在…

再谈前端算法

楔子 – 青蛙跳台阶什么是算法算法实例 &#xff1a; 实现一个LRU缓存 实现 LRUCache扩展&#xff1a; ES6 Map Map的创建和初始化&#xff1a;添加键值对&#xff1a;获取键值对&#xff1a;检查Map中是否存在某个键&#xff1a;删除键值对&#xff1a;遍历Map&#xff1a;获取…

MulticoreWare与Imagination一同按下汽车计算工作负载的“加速键”

中国北京 – 2024年1月8日 - MulticoreWare Inc与Imagination Technologies共同宣布已在德州仪器TDA4VM处理器上实现了GPU计算&#xff0c;不仅使算力提升了约50 GFLOPS&#xff0c;而且还实现了自动驾驶和高级驾驶辅助系统&#xff08;ADAS&#xff09;常见工作负载性能的跃升…

环境变量的使用

1.用法 1.建立文件夹.env.production&#xff08;开发&#xff09;.env.development(生产) 代码: NODE_ENVdevelopment VUE_APP_BASE_APIwww.aaa.comNODE_ENVproduction VUE_APP_BASE_APIwww.xxx.com 注意: 环境变量的文件夹应该是和src目录同级的: 2.获取 process.env.V…

php环境搭建

PHP环境搭建 1.软件下载及安装 php网址&#xff1a;php.net vscode网址&#xff1a;https://code.visualstudio.com/ 百度网盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1kx_Z-2dz3kGozDcynW7C_Q 提取码&#xff1a;1234 PHP&#xff1a; PHP安装 解压到指定…

无线与局域网技术期末划题自制答案

简答题 1.描述5G的三大应用场景&#xff1f; 5G的三大应用场景包括增强型移动宽带&#xff08;eMBB&#xff09;、超可靠低延迟通信&#xff08;URLLC&#xff09;和大规模机器类型通信&#xff08;mMTC&#xff09;。增强型移动宽带&#xff08;eMBB&#xff09;主要用于支持…

2024.1.9每日一题

LeetCode 2707.字符串中的额外字符 2707. 字符串中的额外字符 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个下标从 0 开始的字符串 s 和一个单词字典 dictionary 。你需要将 s 分割成若干个 互不重叠 的子字符串&#xff0c;每个子字符串都在 dictionary 中出…

MongoDB 设置账号密码_mongodb设置用户名和密码

MongoDB 设置账号密码_mongodb设置用户名和密码 1、安装 安装可以看我这篇文章:https://blog.csdn.net/u014641168/article/details/123937775 2、说明 由于默认安装的MongoDB是没有设置用户密码的,极其危险,所以需要设置一下用户密码 3、创建用户 用Navicat15连接Mon…

【Python学习】Python学习9-字符串

目录 【Python学习】Python学习9-字符串 前言创建语法访问字符串的值字符串拼接Python 转义字符Python字符串运算符Python格式化字符串Python 三引号Unicode字符串Python 的字符串内建函数参考 文章所属专区 Python学习 前言 本章节主要说明Python的字符串类型。 创建语法 …

Linux【C编程】 信号以及信号的处理方式

文章目录 1.什么是信号&#xff1f;1.1信号是内容受限的一种异步通信机制1.2信号由谁发出的&#xff1f;1.3信号由谁处理&#xff0c;如何处理 2.常见的信号3.进程对信号的处理3.1用signal函数处理SIGINT信号3.2使用sigaction 函数 4.alarm 和pause函数4.1 alarm函数详解4.2 pa…