【数据结构】1.2 数据结构的基本概念和术语

news2024/11/20 4:55:34

文章目录

  • 1. 数据、数据元素、数据项和数据对象
  • 2. 数据结构
    • 逻辑结构的种类
    • 存储结构的种类
  • 3. 数据类型和抽象数据类型
    • 数据类型
    • 抽象数据类型
  • 概念小结

1. 数据、数据元素、数据项和数据对象

数据(Data)

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

    • 信息的载体
    • 对客观事物符号化的表示
    • 能够被计算机识别、存储和加工
  • 数据可以分为两类:

    • 数值型的数据:整数、实数等。
    • 非数值型的数据:文字、图像、图形、声音等。

数据元素(Data element)

  • 组成数据基本单位,在计算机程序中通常作为一个整体来进行考虑和处理。
  • 也简称为元素,或称为记录、结点或顶点(后面要学到的树的结点、图的顶点指的都是数据元素)。
  • 一个数据元素可由若干个数据项组成。

在这里插入图片描述

比如说这样一个学生表,假设某个同学转学了,那么是对那个同学的那一行进行整体的删除,这样一个学生的相关信息就是作为整个数据的某一个整体来操作 ,每一行学生信息就是组成数据的数据元素

`数据项(Data Item)

  • 构成数据元素的不可分割的最小单位
    • 例如:学生基本信息中的学号、姓名、性别等都是数据项。

在这里插入图片描述

  • 数据、数据元素、数据项的关系
    • 数据 > 数据元素 > 数据项:
    • 数据是由数据元素组成的,数据元素是由数据项组成的。
      • 例:学生表 > 个人信息 > 学号、姓名…

数据对象(Data Object):

  • 性质相同的数据元素的集合,是数据的一个子集

    • 整数数据对象的集合是 N = {0,±1,±2…}
    • 字母字符数据对象是集合 C = {‘A’,‘B’…‘Z’}
    • 学籍表也能看成一个数据对象,由若干条学生记录构成的子集。

数据元素与数据对象

  • 数据元素:组成数据的基本单位
    • 与数据的关系:是集合的个体。
  • 数据对象:性质相同的数据元素的集合
    • 与数据的关系:集合的子集

2. 数据结构

数据结构

  • 数据元素之间不是孤立存在的,他们之间存在着某种关系,数据元素相互之间的关系称为结构(比如:线性、非线性)。
  • 是指相互之间存在一种或多种特定关系的数据元素的集合。
  • 或者说,数据结构是带结构数据元素的集合

数据结构包括:

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

逻辑结构

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

物理结构(存储结构):

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

逻辑结构与存储结构的关系

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

逻辑结构的种类

划分方法1: 线性和非线性

  1. 线性结构

    • 有且仅有一个开始和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继。
    • 如:线性表、栈、队列、串
      • 每个结点成员最多前后各有一个成员

    在这里插入图片描述

  2. 非线性结构

    • 一个结点可能有多个直接前趋和直接后继。
    • 如:树结构(一对多)、图结构(多对多)。
    • 每个结点成员都可能连接着多个其他结点成员。

划分方法2: 四类基本逻辑结构

  1. 集合结构:结构中的数据元素之间除了同属于一个集合的关系之外,没有其他任何的关系。

在这里插入图片描述

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

在这里插入图片描述

  1. 树形结构:结构中的数据元素之前存在着一对多的层次关系

在这里插入图片描述

  1. 图状结构网状结构:结构中的数据元素之间存在着多对多的任意关系。

在这里插入图片描述

存储结构的种类

顺序存储结构

  • 用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系由元素的存储位置来表示。

  • C语言中用数据来实现顺序存储结构。

    • 例如要存这样一组字符串,就用字符串数组,元素的顺序是什么样的,就怎么忘内存中存。

在这里插入图片描述
在这里插入图片描述

链式存储结构

  • 用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示。

  • C语言中用指针来实现链式存储结构。

  • 存储着每个元素本身的同时,还存储着下一个元素的地址。

    • 像有根链条连起来一样,在存储元素本身的同时,还存着下一个元素的地址,不管你存在哪里,等用到你的时候都可以用前一个元素存着的下个元素的地址找到下一个元素。

在这里插入图片描述

索引存储结构

  • 在存储结点信息的同时,还建立附加的索引表
    • 存储真正的信息的同时还建立了个索引表(目录),方便查找。
  • 索引表中的每一项称为一个索引项
  • 索引项的一般形式是:(==关键字、地址)。
  • 关键字是能唯一标识一个结点的那些数据项。
  • 若每个结点在索引表中都有一个索引项,则该索引表称之为==稠密索引(Dense Index)。
    • 若一组结点在索引表中只对应一个索引项,则该索引表称之为稀疏索引(Sparse Index)。

在这里插入图片描述

散列存储结构

  • 根据结点的关键字直接计算出该结点的存储地址。
    • 详细内容在后面的散列表的查找中有介绍。

在这里插入图片描述

3. 数据类型和抽象数据类型

数据类型

  • 在使用高级程序设计语言编写程序时,必须对程序中出现的每个变量、常量或表达式,明确说明他们所属的数据类型
    • 例如,在 C 语言中:
      • 提供 int,char,float,double 等基本数据类型。
      • 数组、结构体、共用体、枚举 等构造数据类型。
      • 还有 指针、空(void)类型。
      • 用户也可以使用 typedef 自定义数据类型。
  • 一些最基本的数据结构可以用数据类型来实现,如数组、字符串等;
  • 而另一些常用的数据结构,如:栈、队列、树、图等,不能直接用数据类型来表示。
  • 高级语言中的数据类型明显的或隐含的规定了在程序执行期间,变量和表达的所有可能的取值范围,以及在这写数值范围撒花姑娘所允许进行的操作。
    • 例如:C语言中定义变量 i 为 int 类型,就表示 i 是 [-mid,max] 范围的整数,在这个整数集合上只可以进行 +、-、*、/、% 等操作。

数据类型的作用

  • 约束变量或常量的取值范围
  • 约束变量或常量的操作

数据类型(Data Type)

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

抽象数据类型

  • 抽象就是抽取出实际问题的本质。在计算机中使用二进制来表示数据,在汇编语言中则可能给出各种数据的十进制表示,他们是二进制数据的抽象。
  • 在高级语言中,则给出更高一级的数据抽象,出现了数据类型,如整型、实型、字符型等,可以进一步利用这些类型构造出线性表、栈、队列、树、图等复杂的抽象数据类型。

抽象数据类型Abstract Data Type,ADT)

  • 是指一个数学模型以及定义在此数学模型上的一组操作。
    • 由用户定义,从问题抽象出数学模型(逻辑结构)。
    • 还包括定义在数据模型上的一组抽象运算(相关操作)。
    • 不考虑计算机内的具体存储结构与运算的具体实现算法。

抽象数据类型的形式定义

  • 抽象数据类型可用(D,S,P)三元组 表示。
    • D 是数据对象;
    • S 是 D 上的关系集;
    • P 是对 D 上的基本操作集。

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

在这里插入图片描述

  • 其中:数据对象、数据关系的定义用伪代码描述。
  • 基本操作的定义格式为:
    • 基本操作名(参数表);
    • 初始条件:<初始条件描述>;
    • 操作结果:<操作结果描述>。

基本操作定义格式说明

  • 参数表
    • 赋值参数,只为操作提供输入值。
    • 引用参数以 & 打头,除了可提供输入值以外,还将返回操作结果。
  • 初始条件
    • 描述操作执行之前数据结构和参数应满足的条件;
    • 若不满足,则操作失败,并返回相应出错信息。若初始条件为空,则省略之。
  • 操作结果
    • 说明操作正常完成之后,数据结构的变化状况和应该返回的结果。

定义举例:Circle 的定义

在这里插入图片描述

#include <stdio.h>
#include <math.h>
void Circle(int* C,int r,int x,int y)//数据对象
{
        C[0]= r;
        C[1]= x;
        C[2]= y;
}
double Area(int* C)
{
        return 3.14 * pow(C[0],2);
}
double Circumference(int* C)
{
        return 2 * 3.14 * C[0];
}
int main()
{
        int C[3]= {0},r,x,y;
        int i;
        printf("请输圆的半径及xy的坐标");
        scanf ("%d %d %d",&r,&x,&y);

        Circle(C,r,x,y);
        printf("圆的面积是:%lf\n",Area(C));
        printf("圆的周长是:%lf\n",Circumference(C));
        return 0;
}
请输圆的半径及xy的坐标 3 3 3
圆的面积是:28.260000
圆的周长是:18.840000

概念小结

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

AcWing1074. 二叉苹果树(树形DP +分组背包)

AcWing1074. 二叉苹果树&#xff08;树形DP 分组背包&#xff09;一、问题二、分析1、状态表示2、状态转移3、循环设计三、代码一、问题 二、分析 这道题是一个在数上做分组背包问题的模型&#xff0c;那么为什么是分组背包呢&#xff1f;作者在之前的文章中进行过详细地讲解&…

VUE2常用知识

1、Vue的基本原理 【】当一个Vue实例创建时&#xff0c;Vue会遍历data中的属性&#xff0c;用 Object.defineProperty&#xff08;vue3.0使用proxy &#xff09;将它们转为 getter/setter&#xff0c;并且在内部追踪相关依赖&#xff0c;在属性被访问和修改时通知变化。 每个组…

工时管理:按工作时间还是完成的任务来跟踪员工的生产力?

据中国社科院的一项调查显示&#xff1a;我国有86%的职场人都患有拖延症&#xff1b;50%的人不到最后一刻绝不开始工作&#xff1b;13%的人没有人催不能完成工作。 拖延症对小型或成长型企业的影响是很大的&#xff0c;毕竟&#xff0c;任务永远不会因为逃避或简单地坐在那里而…

【Linux】信号保存、信号处理、可重入函数、volatile关键字、SIGCHLD信号

目录 一、信号保存 1.1 信号相关的概念名词 1.2 在内核中的表示 1.3 sigset_t与操作函数 1.4 信号设定 二、信号处理 2.1 内核空间与用户空间 2.2 内核态和用户态 2.3 信号的捕捉流程 2.4 sigaction 函数 三、可重入函数 四、volatile 五、SIGCHLD信号 一、信号保…

当今主流的网络服务应用

文件传输协议 主机之间传输文件是IP网络的一个重要功能&#xff0c;如今人们可以方便地使用网页、邮箱进行文件传输。 然而在互联网早期&#xff0c;Web&#xff08;World Wide Web&#xff0c;万维网&#xff09;还未出现&#xff0c;操作系统使用命令行的时代&#xff0c;…

webpack前端应用之基础打包

目录 前言&#xff1a;初识 Webpack 5 一、前端工程化 1、webpack ​ &#xff08;2&#xff09;主要功能&#xff1a; 2、webpack的使用&#xff1a;配置文件所需要的信息&#xff08;五大配置属性&#xff09; 3、示例 强调&#xff1a; 4、webpack中使用的loader 二…

【Java基础】003 -- Java基础概念(计算机的存储规则)

目录 计算机的存储规则 1、什么是二进制&#xff1f; 2、为什么计算机要使用二进制存储数据&#xff1f; 3、进制之间可以转换吗&#xff1f; 4、码表&#xff08;Text文本&#xff09; 5、图片数据 6、声音数据 计算机的存储规则 在计算机中&#xff0c;任意的数据都是…

java集成RSA非对称加密数据传输

使用场景: 前端请求后端接口时如:登录接口,这时候需要传账号密码到后端接口请求这样就会暴露请求的数据。RSA非对称加密分公钥和私钥,公钥将数据进行加密,私钥对加密的数据进行解密 (当然前端最好是封装一下不要暴露出来公钥) 代码实现: 1、RSA工具类(或访问http:…

大数据舆情监控应用平台,TOOM大数据舆情监控系统的作用

大数据舆情监控应用是利用大数据技术对社会舆情的收集、分析、挖掘和展示的工具。它通常会收集和分析各种社交媒体、新闻媒体、博客等信息&#xff0c;以了解舆情动态和趋势。大数据舆情监控应用可以帮助企业和政府了解市场和社会动态&#xff0c;为决策提供支持。然而&#xf…

聚观早报 |比亚迪预计去年营收超4200亿元;美股三大指数集体收跌

今日要闻&#xff1a;比亚迪预计去年营收超 4200 亿元&#xff1b;美股三大指数集体收跌&#xff1b;王凤英正式加入小鹏汽车出任总裁&#xff1b;苹果计划在印度生产 25% 的 iPhone 手机&#xff1b;LVMH老板放狠话坚决打击代购行为比亚迪预计去年营收超 4200 亿元 1 月 30 日…

(Java高级教程)第四章必备前端基础知识-第三节3:JavaScript之DOM和BOM

文章目录一&#xff1a;WebAPI概述二&#xff1a;DOM&#xff08;1&#xff09;获取元素&#xff08;2&#xff09;事件&#xff08;3&#xff09;操作元素A&#xff1a;获取&#xff08;修改&#xff09;元素内容B&#xff1a;获取&#xff08;修改&#xff09;元素属性C&…

LeetCode 刷题系列 -- 108. 将有序数组转换为二叉搜索树

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1&#xff1a;输入&#xff1a;nums [-10,-3,0,5,9]输出&a…

粒子群优化(PSO)算法例题实现

目录 一、实验要求 二、算法流程 三、案例实现及结果 完整程序&#xff1a; 一、实验要求 二、算法流程 粒子群算法流程&#xff1a; 1、初始化&#xff1a;初始化粒子群&#xff1b;给每个粒子赋予初始位置和速度 2、计算适应值&#xff1a;根据适应度函数&#xff0c;计…

新范式+新标准=世界级产品|StarRocks年度总结

岁序常易&#xff0c;华章日新。虎年即将落幕&#xff0c;雄关漫道&#xff0c;我们携手社区斗志昂扬&#xff0c;并肩虎跃雄关。兔年新岁将至&#xff0c;黎明破晓&#xff0c;我们协力社区蓄势待发&#xff0c;昂首共赴新程。值此送虎迎兔的新春佳节之际&#xff0c;感恩与St…

电子技术——MOS放大器的DC偏置

电子技术——MOS放大器的DC偏置 正如前几节我们学习的&#xff0c;MOS放大器的小信号模型的参数取决于正确的DC偏置&#xff0c;这个步骤称为偏置设计。一个好的偏置设计要满足一个稳定的漏极DC电流 IDI_DID​ 和设置正确的 VDSV_{DS}VDS​ 保证MOS管在放大信号的时候处在饱和区…

Qt StyleSheet介绍

文章目录前言纠错技巧可以使用 , 号来同时指明多个同一类型控件的样式表qss注释前言 本文主要以这篇博客为基础。添加一些自己使用的心得和使用样式表的一些技巧 纠错 ID选择器这里类型选择器可以省略&#xff0c;因为每个控件的objectName是不一样的&#xff0c;所以无需指定…

高性能消息队列中间件MQ

毕业后工作半年&#xff0c;在自己的讲课中需要介绍消息队列&#xff0c;以前在大学也有经常接触message queen&#xff0c;但却还不够深入了解掌握&#xff0c;这次写个专门针对mq的文章理清头绪。 以下是学习mq的知识框架&#xff0c;我会不定时更新补充 RabbitMQ概念_MQ 消…

TwinCAT3串口通讯EL6021模块使用-和串口调试助手自由协议通讯

目录 一、简介 二、环境介绍 三、接线连接 四、创建TwinCAT3程序工程 1、IO扫描和参数设置 2、创建PLC程序 &#xff08;1&#xff09;库文件添加 &#xff08;2&#xff09;创建任务和程序 &#xff08;3&#xff09;变量关联 &#xff08;4&#xff09;重新激活工程、运…

adb的一些基本操作

adb的一些基本操作 Android使用的系统一般是debian系列操作系统&#xff0c;所以使用adb shell连接到手机后&#xff0c;可以使用大部分Debian系列的命令进行相关的操作 列出所有应用&#xff1a;adb shell pm list packages 列出第三方(系统)应用&#xff1a;adb shell pm li…

1611_PC汇编语言_math例程分析

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 这一次分析后带有注释的代码我会在笔记最后做一个完整的附加。 这一个例程&#xff0c;主要是为了阐述前面讲到的数学运算。但是从这些操作中&#xff0c;很多底层…