数据结构与算法入门笔记(持续更新中)

一、基本概念和术语

1.1 数据

  • 能输入计算机且能被计算机处理的各种符号的集合
  • 数值型数据:整数、实数等
  • 非数值型数据:文字、图像、图形等

1.2 数据元素

  • 是数据的基本单位,在计算机程序中通常作为一个整体来考虑.
  • 简称:元素、记录、结点、顶点
  • 一个数据元素可由若干个数据项组成

1.3 数据项

  • 构成数据元素不可分割的最小单位
  • 数据、数据元素、数据项三者之间的关系 : 数据>数据元素>数据项

在这里插入图片描述

1.4 数据对象

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

例如:

  • 字符字符的数据对象是集合C={‘A’,‘B’,‘C’…‘Z’}

1.5数据元素与数据对象

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

1.6 数据结构

结构

  • 数据元素相互之间的关系称为结构

数据结构

  • 相互之间存在一种或多种特定关系的数据元素的集合

1.6.1 数据结构包含三方面的内容

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

1.6.2 数据结构的两个层次

逻辑结构

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

物理结构(存储结构)

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

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

  • 存储结构是逻辑关系的表现(映像)与元素本身的表现(映像)。
  • 逻辑结构是数据结构的抽象,存储结构是数据结构的实现
  • 两者综合起来建立了数据元素之间的结构关系
1.6.2.1 逻辑结构的种类
划分方法一:线性结构 和 非线性结构
  • 线性结构: 有且仅有一个开始和一个终端结点并且所有的结点都最多只有一个直接前驱和一个直接后继,例如:线性表、栈、队列、串

在这里插入图片描述

  • 非线性结构:一个结点可能有多个直接前驱和直接后继例如树、图
    在这里插入图片描述
划分方法二:四类基本逻辑结构

1. 集合结构:结构中数据元素之间除了同属于一个集合的关系外,无任何其他关系
2. 线性结构:结构中的数据元素之间存在着一对一的线性关系
3. 树形结构:结构中的数据元素存在一对多的层次关系
4. 图状结构或网状结构:结构中的数据元素存在多对多的关系
在这里插入图片描述

1.6.2.2 四种基本的存储结构
顺序存储结构

用一组 连续存储单元依次存取数据元素数据元素之间的逻辑关系由 元素的存储位置来表示(c语言中用数组来实现)

链式存储结构
  • 用一组 任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示(c语言中用指针来实现链式存储结构)
    在这里插入图片描述
索引存储结构
  • 在存储结点信息时,还建立附加的索引表
    在这里插入图片描述
散列存储结构
  • 根据结点的关键字直接计算出该结点的存储地址

在这里插入图片描述

1.7 数据类型和抽象数据类型

数据类型
  • 数据类型是一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称
    数据类型 =值的集合 +值集合上的操作
数据类型的作用
  • 约束变量或常量的取值范围
  • 约束变量或常量的操作
抽象数据类型(ADT)

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

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

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

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

ADT 抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>**
}ADT 抽象数据类型名

其中:

  • 数据对象、数据关系的定义用伪代码描述

基本操作的定义格式为:

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

基本操作定义格式说明:
参数表:

赋值参数只为操作提供输入值**
引用参数: 以&打头,可提供输入值,还可返回操作结果

初始条件:

描述操作执行之前数据结构和参数应满足的条件,不满足操作失败,返回相应错误信息。初始条件为空,则省略

操作结果:

操作正常完成之后,数据结构的变化状况和返回的结果
在这里插入图片描述

抽象数据类型定义举例:Circle定义

ADT Circle{
	数据对象:D={r,x,y| r,x,y均为实数}
	数据关系:R={<r,x,y>| r是半径,<x,y>是圆心坐标}
	基本操作:
	Circle(&C,r,x,y)
		操作结果:构造一个圆
	double Area(C)
		初始条件:圆已存在
		操作结果:计算面积
	double Circumference(C)
		初始条件:圆已存在
		操作结果:计算周长
		...
		}ADT Circle
		

抽象数据类型定义举例:复数的定义

ADT Complex{
	D={r1,r2| r1,r2都是实数}
	S={<r1,r2>| r1是实部,r2是虚部}
	assign(&C,v1,v2)
		初始条件:空的复数C已存在
		操作结果:构造复数C,r1,r2分别被赋予v1,v2的值
	destroy(&C)
		初始条件:复数C已存在
		操作结果:复数C被销毁
	GetReal(Z,&realPart)
		初始条件:复数已经存在
		操作结果:用realPart返回复数Z的实部值
	GetImag(Z,&ImagPart)
		初始条件:复数已存在
		操作结果:用ImagPart返回复数Z的虚部值
	
}ADT Complex
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值