第1章绪论数据结构形成和发展的背景1.1什么是数据
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a
b
c
d
e
f
g
h
图 1-5
树形结构抽象描述示意图
例 :设一个数据结构的抽象描述为D=(K,R),其中 K={1,2,3,4},而R={(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)}, 则它的逻辑结构用图描述见图。
wk.baidu.com
1
2
3 图 1-6
4 图形结构抽象描述示意图
数据结构在计算机中的表示称为数据的物理结构,又 称为存储结构。 在计算机中,我们可以用一个由若干位组合起来形成 的一个位串表示一个数据元素,通常称这个位串为元 素或结点 当数据元素有若干个数据项组成时,位串中对应于各 个数据项的子串称为数据域
3. 数据对象(data object)
是性质相同的数据元素组成的集合,是数据的一个子集。 例如,整数数据对象的集合可表示为N={0,±1, ±2…….},字母字符数据对象的集合可表示为 C={‘A’,’B’,…’Z’}。 4 .数据结构(data structure) 是指相互之间存在一种或多种特定关系的数据元素所组 成的集合。具体来说,数据结构包含三个方面的内容, 即数据的逻辑结构,数据的存贮结构和对数据所施加的 运算。数据之间的相互关系称为逻辑结构 数据结构在计算机中的表示称为数据的物理结构,又称 为存储结构。这三个方面的关系为:
例1、人员信息管理问题(线性数据结构)
学号 01 02 03 04 05 06 07 08 姓名 张三 李四 王五 赵六 钱七 刘八 朱九 孙十 性别 男 男 女 男 女 女 男 女 籍贯 长沙 北京 广州 上海 南京 武汉 昆明 杭州 电 话 8639000 23456789 30472589 41237568 5013472 61543726 4089651 6154372 通 讯 地 址 麓山南路 327 号 学院路 435 号 天河路 478 号 南京路 1563 号 南京大学 武汉大学 云南大学 西湖路 635 号
ADT 抽象数据类型名{ 数据对象:<数据对象的定义> 数据关系:<数据关系的定义> 基本操作:<基本操作的定义> }ADT抽象数据类型名 其中数据对象和数据关系的定义用伪码描述,基本操作的 定义格式为: 基本操作名(参数表) 初始条件:<初始条件描述> 操作结果:<操作结果描述> 基本操作有两种参数:赋值参数值为操作提供输入值;引用参 数以&打头,除了可以提供输入值,还将返回操作结果。 “初始条件”描述操作执行前数据结构和参数应满足的条件,若不 满足,则操作失败,并返回相应出错信息。若为空则省略 “操作结果”说明了操作正常完成后,数据结构的变化和应返回的 结果。
Status InitTriplet(Triplet &T,ElemType v1, ElemType v2, ElemType v3)
操作结果:构造了三元组T,元素e1,e2,e3分别被赋以参数v1,v2,v3的值
Status
DestroyTriplet(Triplet &T)
操作结果:三元组T被销毁
例:抽象数据类型三元组的定义: ADT Triplet{ 数据对象:D={e1,e2,e3|e1,e2,e3∈ElemSet} 数据关系:R1={<e1,e2>,<e2,e3>} 基本操作: InitTriplet(&T,v1,v2,v3)
操作结果:构造了三元组T,元素e1,e2,e3分别被赋以参数v1,v2,v3的值
(11)逻辑运算约定 与运算&&:对于A&&B,当A的值为0时,不再对B求值 或运算||:对于A||B,当A的值为非0时,不再对B求值
例:抽象数据类型Triplet的表示和实现
//-------------采用动态分配的顺序存储结构-------------typedef ElemType *Triplet; //ElemType类型的指针定义为Triplet类型 //--------------基本操作的函数原型说明-----------------
(1)数据的逻辑结构独立于计算机,是数据本身所固有的。
(2)存贮结构是逻辑结构在计算机存贮器中的映像,必须 依赖于计算机。
(3)运算是指所施加的一组操作总称。运算的定义直接依 赖于逻辑结构,但运算的实现必依赖于存贮结构。
数据结构从逻辑结构角度通常分为四类基本结构: 一、集合 结构中的数据元素除了同属于一种类型 外,别无 其它关系。 二、线性结构 结构中的数据元素之间存在一对一 的关系。 三、树型结构 结构中的数据元素之间存在一对 多的关系。 四、图状结构或网状结构 结构中的数据元素之间 存在多对多的关系。
数据类型(data type)
是一组性质相同的值的集合以及定义于这个值集合上的一组操作 的总称。
例如,高级语言中用到的整数数据类型,是指由-32768到32767 中值构成的集合及一组操作(加、减、乘、除、乘方等)的总称。 抽象数据类型(ADT) 指一个数学模型以及定义在该模型上的一组操作。抽象数据类型 的定义仅取决于它的一组逻辑特性,与其在计算机内部如何表示 和实现无关。 一个抽象数据类型的软件模块通常包含定义、表示和实现三部分 抽象数据类型可用以下三元组表示: (D,S,P) D是数据对象,S是D上的关系集,P是D上的基本操作集。 本书用以下格式定义抽象数据类型:
数据结构是一门研究非数值计算的程序设计 问题中计算机的操作对象以及它们之间的关系和 操作等的学科。
1.2 基本概念和术语
1. 数据(data) 数据是指能够输入到计算机中,并被计算机识别和处理 的符号的集合。例如:数字、字母、汉字、图形、图像、 声音都称为数据。 2.数据元素(data element) 数据元素是组成数据的基本单位。 数据元素是一个数据整体中相对独立的单位。但它还可 以分割成若干个具有不同属性的项(字段),故不是组 成数据的最小单位。
(2)数据结构的表示用类型定义(typedf)描述。数据元素类型 约定为ElemType,由用户在使用该数据类型时自行定义
(3)基本操作的算法都用以下形式的函数描述 函数类型 函数名(函数参数表){ //算法说明 语句序列 }//函数名 除了函数的参数需要说明类型外,算法中使用的辅助变量 可以不做变量说明,必要时对其作用给予注释。一般: a、b、c、d、e等用作数据元素名; i、j、k、l、m、n等用作整形变量名; p、q、r等用作指针变量名。 当函数返回值为函数结果状态代码时,函数定义为Status 类型。参数两种:赋值参数和引用参数(以&打头)
(6)循环语句有 for语句 for(赋初值表达式序列;条件;修改表达式序列)语句; while语句 while(条件)语句; do-while 语句 do { 语句序列; }while(条件); (7)结束语句有 函数结束语句 return 表达式; ruturn; case结束语句 break; 异常结束语句 exit(异常代码)
例:设有一个线性表(a1,a2,a3,a4,a5),它的抽象描述可表示为 D=(K,R),其中K={a1,a2,a3,a4,a5},R={<a1,a2>,<a2,a3>,<a3,a4>,<a4,a5>}, 则它的逻辑结构用图描述见图。
a1
a2
a3
a4
a5
线性表的逻辑结构描述
例 : 设 一 个 数 据 结 构 的 抽 象 描 述 为 D=(K,R), 其 中 K={a,b,c,d,e,f,g,h},r={<a,b>,<a,c>,<a,d>,<b,e>,<c,f>,<c,g>, <d,h>},则它的逻辑结构用图描述见图。
Status Get(T,i,&e)
初始条件:三元组T已存在,1≤i≤3 操作结果:用e返回T的第i元的值 ……
//-----------基本操作的实现-----------Status InitTriplet(Triplet &T,ElemType v1, ElemType v2, ElemType v3){
(8)输入和输出语句有 输入语句 scanf(变量1,…,变量n); 输出语句 printf(表达式1,…,表达式n);
(9)注释 单行注释
//文字序列
(10)基本函数有 求最大值 求最小值 求绝对值 求不足整数值 求进位整数值 判定文件结束 判定行结束
max(表达式1,…,表达式n) min(表达式1,…,表达式n) abs(表达式) floor(表达式) ceil(表达式) eof(文件变量) 或eof eoln(文件变量)或 eoln
(5)选择语句有 条件语句1 if(表达式)语句; 条件语句2 if(表达式)语句; else 语句;
开关语句1 switch(表达式){ case 值1:语句序列1;break; …… case 值n:语句序列n;break; default:语句序列n+1; } 开关语句2 switch { case 条件1:语句序列1;break; …… case 条件n:语句序列n;break; default:语句序列n+1; }
图 1-1
学生数据表
例2、人机对弈问题(树型数据结构)
例3、多叉路口交通灯的管理问题(图型数据结构)
C
D
B BA
AD
AC
AB
ED EC EB
BC
E
A
BD DA DB DC EA
例4:汉诺塔问题:(栈结构) A B
C
以上例子都是非数值计算问题,描述它们的数学模型不再 是数学方程,而是表、树、图、栈等数据结构,因此 简单说来:
DestroyTriplet(&T)
操作结果:三元组T被销毁
Get(T,i,&e)
初始条件:三元组T已存在,1≤i≤3 操作结果:用e返回T的第i元的值 ……
}ADT Triplet
1.3抽象数据类型的表示与实现
抽象数据类型可通过固有数据类型来表示和实现,即:利用 处理器中已存在的数据类型来说明新的结构,用已经实现的 操作来组合新的操作。对教材采用的类C说明: (1)预定义常量和类型: //函数结果状态代码 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 //Status 是函数的类型,其值是函数结果状态代码 typedef int Status
数据结构在计算机中有两种不同的表示方法:
顺序表示和非顺序表示 由此得出两种不同的存储结构: 顺序存储结构和链式存储结构 顺序存储结构:用数据元素在存储器中的相对位置来表示 数据元素之间的逻辑关系。 链式存储结构:在每一个数据元素中增加一个存放地址 的指针(Pointer ),用此指针来表示数据元素之间的逻 辑关系。 我们可以用数据类型来描述存储结构
第1章 绪论
“数据结构”形成和发展的背景:
1.1什么是数据结构
1、用计算机解决问题的步骤: 从具体问题抽象出一个适当的数学模型 设计一个解此数学模型的算法 编程序 调试程序直至成功
例如,求解梁架结构中应力的数学模型的线性方程组,该方程组可以 使用迭代算法来求解。预报人口增长情况的数学模型为微分方程。 然而更多的分数只计算问题无法用数学方程加以描述解决这类问 题的关键不再是数学分析和计算方法,而是要设计出合适的数据结构, 才能有效地解决问题。下面所列举的就是属于这一类的具体问题
(4)赋值语句有 简单赋值:变量名=表达式; 串联赋值:变量名1=变量名2=……=变量名k=表达式; 成组赋值: (变量名1,…,变量名k)=(表达式1,…,表达式k); 结构名=结构名; 结构名=(值1,值2,…,值k); 变量名[]=表达式; 变量名[起始下标..终止下标]=变量名[起始下标..终止下标]; 变换赋值:变量名 变量名; 条件赋值:条件表达式?表达式T : 表达式F;
数据结构的形式定义为:数据结构是一个二元组:
Data-Structure=(D,S) 其中:D是数据元素的有限集,S是D上关系的有限集。 例 复数的数据结构定义如下: Complex=(C,R) 其中:C是含两个实数的集合﹛C1,C2﹜,分别表示 复数的实部和虚部。R={P},P是定义在集合上的一种 关系{〈C1,C2〉}。