考研期末数据结构第一章绪论1解析.docx

上传人:b****1 文档编号:1620821 上传时间:2022-10-23 格式:DOCX 页数:21 大小:63.93KB
下载 相关 举报
考研期末数据结构第一章绪论1解析.docx_第1页
第1页 / 共21页
考研期末数据结构第一章绪论1解析.docx_第2页
第2页 / 共21页
考研期末数据结构第一章绪论1解析.docx_第3页
第3页 / 共21页
考研期末数据结构第一章绪论1解析.docx_第4页
第4页 / 共21页
考研期末数据结构第一章绪论1解析.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

考研期末数据结构第一章绪论1解析.docx

《考研期末数据结构第一章绪论1解析.docx》由会员分享,可在线阅读,更多相关《考研期末数据结构第一章绪论1解析.docx(21页珍藏版)》请在冰豆网上搜索。

考研期末数据结构第一章绪论1解析.docx

考研期末数据结构第一章绪论1解析

第一章绪论

1.1什么是数据结构

一般来讲,用计算机解决一个具体问题时,大致需要下列几个步骤:

首先从具体问题抽象出一个适当的数学模型,然后设计一个解此数学模型的算法,最后编出程序、进行测试、调整直至得到最终答案。

例1-1图书馆的书目检索系统自动化问题

001

高等数学

樊映川

S01

002

理论力学

罗远祥

L01

003

高等数学

华罗庚

S01

004

线性代数

栾汝书

S02

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

高等数学

001,003…

樊映川

001,…

L

002,…

理论力学

002,…

华罗庚

003,…

S

001,003,…

线性代数

004,…

栾汝书

004,…

 

 

 

由这四张表构成的文件便是书目自动检索的数学模型,计算机的主要操作便是按照某个特定要求对书目文件进行查询。

在这类文档管理的数学模型中,计算机处理的对象之间通常存在着的是一种最简单的线性关系,这类数学模型可称为线性的数据结构。

例1-2计算机和人对弈

算法:

?

对弈的规则和策略

模型:

?

棋盘及棋盘的格局

例1-3多叉路口交通灯的管理问题

算法:

?

需要管理的项目?

如何管理?

用户界面?

模型:

?

各种图

概括地说:

数据结构是一门讨论“描述现实世界实体的数学模型(非数值计算)及其上的操作在计算机中如何表示和实现”的学科。

或者说,

数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。

数据结构的发展历史

v1968年美国唐欧克努特教授开创了数据结构的最初体系

v从20世纪70年代中期到80年代初,各种版本的数据结构著作就相继出现。

v未来发展的两个方向:

(1)面向各专门领域中特殊问题的数据结构

(2)抽象数据类型的观点来讨论数据结构

1.2基本概念和术语

一、数据与数据结构

数据:

所有能输入到计算机中,且能被计算机程序处理的符号的总称。

是计算机操作的对象的总称。

是计算机处理的信息的某种特定的符号表示形式。

数据元素:

是数据(集合)中的一个“个体”,是数据结构中讨论的基本单位。

可由若干个数据项组成。

数据项:

是数据结构中讨论的最小单位。

数据元素可以是数据项的集合。

例如:

描述一个运动员的数据元素可以是

数据对象:

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

例如,整数数据对象是集合N={0,1,-1,2,-2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’}。

数据结构:

带结构的数据元素的集合。

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

假设用三个4位的十进制数表示一个含12位数的十进制数。

例如:

3214,6587,9345─a1(3214),a2(6587),a3(9345)

则在数据元素a1、a2和a3之间存在着“次序”关系a1,a2、a2,a3

3214,6587,9345≠6587,3214,9345

a1a2a3a2a1a3

又例,在2行3列的二维数组{a1,a2,a3,a4,a5,a6}中六个元素之间存在两个关系:

 

行的次序关系:

row={,,,}

列的次序关系:

col={,,}

a1a3a5≠a1a2a3

a2a4a6a4a5a6

再例,在一维数组{a1,a2,a3,a4,a5,a6}的数据元素之间存在如下的次序关系:

{|i=1,2,3,4,5}

可见,不同的“关系”构成不同的“结构”。

或者说,数据结构是相互之间存在着某种逻辑关系的数据元素的集合。

数据的逻辑结构可归结为以下四类:

线性结构

树形结构

图状结构或网状结构

集合结构

数据结构的形式定义为:

数据结构是一个二元组:

Data_Structures=(D,S)

其中:

D是数据元素的有限集,

S是D上关系的有限集

数据的存储结构:

逻辑结构在存储器中的映象

“数据元素”的映象?

“关系”的映象?

数据元素的映象方法:

例:

用二进制位(bit)的位串表示数据元素

(321)10=(501)8=(101000001)2

A=(101)8=(001000001)2

关系的映象方法:

(表示x,y的方法)

顺序映象

以相对的存储位置表示后继关系。

例如:

令y的存储位置和x的存储位置之间差一个常量C。

而C是一个隐含值,整个存储结构中只含数据元素本身的信息。

链式映象

以附加信息(指针)表示后继关系。

需要用一个和x在一起的附加信息指示y的存储位置。

在不同的编程环境中,存储结构可有不同的描述方法。

当用高级程序设计语言进行编程时,通常可用高级编程语言中提供的数据类型描述之。

例如:

以三个带有次序关系的整数表示一个长整数时,可利用C语言中提供的整数数组类型。

定义长整数为:

typedefintLong_int[3]

 

二、数据类型

在用高级程序语言编写的程序中,必须对程序中出现的每个变量、常量或表达式,明确说明它们所属的数据类型。

例如,C语言中提供的基本数据类型有:

整型int

浮点型float

双精度型double实型(C++语言)

字符型char

逻辑型bool(C++语言)

不同类型的变量,其所能取的值的范围不同,所能进行的操作不同。

数据类型:

是一个值的集合和定义在此集合上的一组操作的总称。

三、抽象数据类型

(AbstractDataType简称ADT)

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

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

ADTComplex{

数据对象:

D={e1,e2|e1,e2∈RealSet}

数据关系:

R1={|e1是复数的实数部分

|e2是复数的虚数部分}

基本操作:

AssignComplex(&Z,v1,v2)

操作结果:

构造复数Z,其实部和虚部

分别被赋以参数v1和v2的值。

DestroyComplex(&Z)

操作结果:

复数Z被销毁。

GetReal(Z,&realPart)

初始条件:

复数已存在。

操作结果:

用realPart返回复数Z的实部值。

GetImag(Z,&ImagPart)

初始条件:

复数已存在。

操作结果:

用ImagPart返回复数Z的虚部值。

Add(z1,z2,&sum)

初始条件:

z1,z2是复数。

操作结果:

用sum返回两个复数z1,z2的和值

}ADTComplex

假设:

z1和z2是上述定义的复数

则Add(z1,z2,z3)操作的结果

即为用户企求的结果

z3=z1+z2

ADT有两个重要特征:

数据抽象

用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)。

数据封装

将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节。

抽象数据类型的描述方法

抽象数据类型可用(D,S,P)三元组表示。

其中:

D是数据对象;

S是D上的关系集;

P是对D的基本操作集。

ADT抽象数据类型名{

数据对象:

〈数据对象的定义〉

数据关系:

〈数据关系的定义〉

基本操作:

〈基本操作的定义〉

}ADT抽象数据类型名

其中基本操作的定义格式为:

基本操作名(参数表)

初始条件:

〈初始条件描述〉

操作结果:

〈操作结果描述〉

赋值参数只为操作提供输入值。

引用参数以&打头,除可提供输入值外,还将返回操作结果。

初始条件描述了操作执行之前数据结构和参数应满足的条件,若不满足,则操作失败,并返回相应出错信息。

操作结果说明了操作正常完成之后,数据结构的变化状况和应返回的结果。

若初始条件为空,则省略之。

例1—6抽象数据类型三元组的定义:

ADTTriplet{

数据对象:

D={e1,e2,e3|e1,e2,e3∈ElemSet(定义了关系运算的某个集合)}

数据关系:

R1={,}

基本操作:

InitTriplet(&T,v1,v2,v3)

操作结果:

构造了三元组T,元素e1,e2和e3分别被赋以参数v1,v2和v3的值。

DestroyTriplet(&T)

操作结果:

三元组T被销毁。

Get(T,I,&e)

初始条件:

三元组已存在,1<=i<=3.

    操作结果:

用e返回T的第i元的值.

Put(&T,i,e)

初始条件:

三元组T已存在,1<=i<=3.

  操作结果:

改变T的第i元的值为e.

 IsAscending(T)

初始条件:

三元组T已存在.

操作结果:

如果T的3个元素按升序排列,则返回1,否则返回0.

 IsDescending(T)

初始条件:

三元组已存在.

  操作结果:

如果T的3个元素按降序排列,则返回1,否则返回0.

 Ma(T,&e)

初始条件:

三元组已存在.

  操作结果:

用e返回T的3个元素中的最大值.

}ADT Triplet

多形数据类型

是指其值的成分不确定的数据类型。

例如,例1—6中定义的抽象数据类型Triplet,其元素e1、e2和e3可以是整数或字符或字符串,甚至更复杂的由多种成分构成。

从抽象数据类型的角度看,具有相同的数学抽象特性,故称之为多形数据类型。

1.3抽象数据类型的表示与实现

抽象数据类型需要通过固有数据类型(高级编程语言中已实现的数据类型)来实现。

以下对类C语言的描述作简要说明。

(1)预定义常量和类型

//函数结果状态代码

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-2

//Status是函数的类型,其值是函数结果状态代码

TypedefintStatus;

(2)数据结构的表示(存储结构)用类型定义(typedef)描述。

数据元素类型约定

ElemType,由用户在使用该数据类型时自行定义。

(3)基本操作的算法都用以下形式的函数描述:

函数类型函数名(函数参数表){

//算法说明

语名序列

}//函数名

除了函数的参数需要说明类型外,算法中使用的辅助变量可以不作变量说明,必要时对其作用给予注释。

一般而言,a、b、c、d、e等用作数据元素名,i、j、k、l、m、n等用作整形变量名,p、q、r等用作指针变量名。

当函数返回值为函数结果状态代码时,函数定义为Status类型。

为了便于算法描述,除了值调用方式外,增添了C++语言的引用调用的参数传递方式。

在形参表中,以&打头的参数即为引用参数。

(4)赋值语名有

简单赋值变量名=表达式;

串联赋值变量名1=

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 销售营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1