文章目录

  • 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

概念小结

【数据结构(2)】1.2 数据结构的基本概念和术语相关推荐

  1. 【数据结构】图1——图的基本概念和术语、类型定义

    文章目录 图的定义 图的术语 图的抽象数据类型定义 图的定义 图的术语 1.有向图:每条线都是有方向的. 2.无向图:每条线都是无方向的. 顶点:数据元素Vi称为顶点. 边:P(Vi,Vj)表示在顶点 ...

  2. 第一课:数据结构的基本概念和术语

    数据结构   本课主题:数据结构的基本概念和术语 教学目的:了解数据结构的基本概念,理解常用术语 教学重点:基本概念:数据与数据元素 教学难点:数据元素间的四种结构关系. 授课内容: 一.数据.数据元 ...

  3. 【数据结构】之基本概念和术语

    1.1数据结构的基本概念 1.1.1 基本概念和术语 1.数据 数据是信息的载体,是描述客观事物属性的数.字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合.数据是计算机程序加工的原料. ...

  4. 数据结构~07.栈和队列的基本概念

    数据结构~07.栈和队列的基本概念 本文是上一篇文章的后续,详情点击该链接~ 栈的定义: 栈是一种只能在一端进行插入或删除的线性表.其中,允许插入或删除的一端为栈顶(TOP).栈顶由一个称为栈顶指针的 ...

  5. 【数据结构与算法】-6.1图的基本概念和术语

    1 图的基本概念和术语 图:G=(V,E) Graph= (Vertex, Edge) V:顶点(数据元素)的有穷非空集合; E:边的有穷集合. 图可以没有边 无向图:每条边都是无方向的 有向图:每条 ...

  6. 【数据结构总结1】-数据结构的自述

    一.数据结构的自我介绍 大家好,饿叫数据结构,是用来提高程序员的程序设计水平的. 官方定义我为:数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成.记为:Data ...

  7. C语言数据结构(大话数据结构——笔记1)数据结构绪论、算法、线性表

    [C语言描述]<数据结构和算法> 说是这个教程是按照<大话数据结构>这本书来编写的:数据结构与算法经典书籍--大话数据结构(带配套源码) ↑废话太TM多了,换一个! [搞定数据 ...

  8. 数据结构与算法入门---数据结构类型

    数据结构与算法入门---数据结构类型 数据的逻辑结构 数据的逻辑结构指数据元素之间的逻辑哦关系(和实现无关) 分类一:线性结构和非线性结构 线性结构:有且只有一个开始结点和一个终端节点,并且所有节点都 ...

  9. python数据结构算法优势_Python数据结构与算法(一)----- 算法效率

    一.引入 先来看一道题: 如果a+b+c=1000, 且a2+b2=c^2(a,b,c为自然数),如何求出所有a,b,c可能的组合? (1) 枚举法 import time start_time = ...

  10. python中定义数据结构_Python中的数据结构—简介

    python中定义数据结构 You have multiples algorithms, the steps of which require fetching the smallest value ...

最新文章

  1. 盘点深度学习中的各种数据增强技巧
  2. SPOJ 2713 线段树(sqrt)
  3. python是面向对象的语言_*Python面向对象总结
  4. Django2.x中url路由的path()与re_path()参数解释(亲测)
  5. oracle数据库存储结构语句,oracle基本语句(第五章、数据库逻辑存储结构管理)...
  6. 用python控制键盘_【python黑科技-pyautogui】教你用python控制滑鼠与键盘
  7. Redis简单命令(部分示例代码)
  8. vnc远程无法关闭窗口_vnc远程画面不能控制,vnc远程画面控制不了是什么原因?原因详解...
  9. python可以做力扣的题吗_力扣题目练习一
  10. 搞事情的程序语法基础
  11. POJ1426-Find The Multiple-深度优先搜索BFS
  12. CentOS Linux解决Device eth0 does not seem to be pres
  13. Flask实现REST API之接收POST和GET请求
  14. 解决阿里巴巴JSONObject工具 com.alibaba.fastjson.JSONObject cannot be cast to 的问题
  15. C#实现图书管理系统(课程设计)——第五步、查询界面及操作
  16. AS | 中大丁涛/田国宝等揭示口腔菌群的差异化输入塑造了与健康状况相关的两种肺型...
  17. 【深度学习】图像分割概述
  18. HTML a标签之空链接
  19. LApacheMP基础环境搭建
  20. 数码管显示原理:共阴极和共阳极的区别,静态显示程序。

热门文章

  1. vue+openlayers实现行政边界、标注交互、效果弹窗
  2. 视频RTMP推流实践
  3. Python入门:格式化输出商品的编号和单价
  4. 秒杀场景下超卖问题解决方案
  5. 美国养育孩子十七绝招
  6. 数据压缩及解压缩算法,多种文件的压缩与解压缩-java android
  7. 20款电脑剪贴板软件良心推荐汇总
  8. 猿创征文|前端进阶必备——WebSockt实现聊天室(附源码)
  9. 商娱兼时尚轻巧 微软Surface RT价格1598
  10. 前端(DOM 、BOM 和 事件 )