教学工作的资源分享

严密数据结构课件第一章资料

重电教务系统

重电教务系统

湘潭大学信息工程学院

石跃祥教授

[email protected]

15367149988

助教:喃红娟18673238738

工学楼北栋307

现状目标正常

学习

加倍努力

学习兴趣

不浓

1.1数据结构讨论范畴

1.2基本概念

1.3算法和算法尺度

1.1数据结构讨论范畴

(数据结构在软件开发中的地位)

系统分析

系统设计

系统的实现

系统维护

Niklaus Wirth

algorithmdatastructures=programs

编程:

算法:

数据结构:

为计算机处理问题而编制

指令集

应对问题的战略

问题的数学模型

结构静力分析计算

例如:数值计算的编程问题

(线性代数方程

(环流模式方程

(球面坐标系)

全球天气预报

非数值计算的编程问题

例:求一组(n个)整数中的最大值

算法:

模特?

基本操作是“比较两个数的大小”

取决于整数值的范围

例2 :酒店客房管理

算法?

模特?

先进先出

队列

例3 :铺设城市煤气管道

算法?

模特?

如何规划总投资

费用最高吗?

照片

概括地说,

数据结构是“说明现实”的讨论

世界实体的数学模型(非数值计算) ) )。

和的操作在计算机中是如何表化的

“表示与实现”的学科。

1.2基本概念

一.数据和数据结构

二.数据类型

三.抽象数据类型

一.数据和数据结构

可以输入计算机,可以计算

机器处理的符号(数值、字符等)的集合。

数据:

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

是计算机处理的信息的特定符号

号码表示形式。

数据(集合)中的“个”

“身体”在计算机中通常作为一个整体

进行方面的考虑和处理。 在数据结构中

讨论的基本单位。

数据要素:

例如:整数"5"、字符" n "等。

---不可分割的“原子”

每一笔钱都叫做“数据项”

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

数据元素也可以由几个钱组成。

例如,描述某个学生的数据元素

称为组合项

年月日

姓名学号班号性别出生年月日入学成绩

原子项

数据结构:

结构化数据元素的集合

有具有相同特性的数据要素的集合,

如果数据元素之间有一种或多种类型

特定的关系称为数据结构。

指数据元素之间存在的关系

例如,在使用三个4位十进制数表示1的情况下

包含12位十进制数时,

314、6587、9345a1(3214 )、a2 ) 6587 )、a3 ) 9345 )

存在于数据要素a1、a2和a3之间

“顺序”关系a1、a2、a2、a3

3214、6587、93456587、3214和9345

例如:

a1 a2 a3 a2 a1 a3

另外,在2行3列二维排列中为6个要素

{a1,a2,a3,a4,a5,a6}

之间有两种关系:

行顺序关系:

row={,}

col={,}

a1 a2 a3

a4 a5 a6

列顺序关系:

在六个数据元素{a1、a2、a3、a4、a5、a6}中

之间有以下顺序关系:

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

数据结构相互之间有某种逻辑关系

的数据元素的集合。

这样,不同的“关系”构成了不同的“结构”

构成一维数组的定义。

从关系或结构上来看,数据结构可以归纳如下

以下4种:

线性结构

树结构

图表结构

集合结构

数据结构包括“逻辑结构”和“物理接合”

“结构”的两个方面(层次) :

逻辑结构是数据元素之间的逻辑关系

请参照的说明。 数据元素的集合和

定义并表示此集合上的几个关系;

物理结构是逻辑结构在计算机中的表示

为了实现,也称为“存储结构”。

数据结构的格式定义描述为:

数据结构是二维的组

Data_Structures=(D,s )

其中,D是数据元素的有限集合,

s是d上关系的有限集合。

例如,将:“班集体”定义为一个数据结构

类=(d,s ) )。

D={ a,b1,…,bn,c1,…cn,d1,…dn }

S={ R1,R2}

R1={,}

R2={,

| j=2,3,…,n }

数据的存储结构

——逻辑结构的内存中的映像

数据元素的图像?

“关系”的形象?

如何映射数据元素:

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

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

a=(101 )8=) 00100001 ) 2

的关系映射方法: (表示x,y的方法) )

顺序影像

在相对存储位置上显示后续关系

例如:命令y存储位置和x的存储位置的

有一个常数c的差

c是默认值,在整个存储结构中

包括数据要素本身的信息

x y

链图像

用追加信息(指针)表示继承关系

需要和x在一起的其他信息

指示y的存储位置

y x

在不同的编程环境中,

存储结构有不同的描述方法。

用高级编程语言进行编程时,

通常可以使用高级编程语言提供的数据

类型说明。

例如:

用有顺序关系的三个整数表示

长整数时,可以用c语言提及

的整数数组类型,

typedef int Long_int [3]

定义长度整数为:

typedef struct {

int y; //年号Year

int m; //月号Month

int d; //日号

} DateType; //日期类型

将日期定义为:

将“学生”定义为:

typedef struct {

char id[8]; //学号

char name[16]; //名称

char sex; //性别‘m/f’:男/女

DateType bdate; //生日

} Student; //学生类型

二.数据类型

在用高级程序语言编写的程序中,

对于程序中出现的每个变量,

常数或表达式。 明确表示它们在哪里

的数据类型。

例如,c语言提供的基本数据类型为:

整数int

浮点型浮点型

字符类型char

型bool(c语言) ) ) ) )。

双精度型双精度型

真实(c语言) )

数据类型是值的集合

以及为此集合定义的一组操作

的总称。

教育信息化促进教育公平研究

教育信息化促进教育公平研究

根据范围不同,可以进行的操作也不同。

例如整数

值的范围为- 32768到32767

操作为、*、/、%

各种高级编程语言都有“整数”

类型在不同的处理器上实现

方法不同,但对程序员来说是“一样的”

“因为数学特性一样。

从“数学抽象”的角度来看,它可以说是一个

个抽象数据类型。

三.抽象数据类型

(Abstract Data Type简称ADT )

是指数学模型和额定值

这个数学模型上的义群

操作

例如:

“整数”是抽象数据类型。

其数学特性和具体的计算机或语言

没关系。

“抽象”的意思是强调数据类型

的数学特性。

抽象数据类型还包括设计软件系统的用户

有时自己定义的数据类型。

在构建软件系统各个相对独立的模块时,

定义一组数据和应用于其上的一组数据

操作,在模块内部给出它们的表示和实

目前,在模块外部使用的只有抽象的数量

根据抽象的操作。

例如,定义抽象数据类型“多个”

数据对象:

D={e1,e2|e1,e2RealSet }

数据关系:

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

| e2是复数的虚数部分}

ADT Complex {

基本操作:

assigncomplex(z,v1,v2 ) ) ) ) ) )。

操作结果:复数z,作实部和虚部

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

EstroyComplex(z ) )。

操作结果:复数z被放弃。

获取真实(z,realPart ) )。

初始条件:已存在多个。

操作结果:在realPart中返回复数z的实部值。

getimag(z,ImagPart )。

初始条件:已存在多个。

操作结果:用ImagPart返回复数z的虚部值。

add(Z1,z2,sum ) )。

初始条件: z1、z2为多个。

操作结果:用sum计算两个复数z1,z2的

价格。

} ADT Complex

(8) (4)3) )。

(8) (4)3) )。

I

I

z

=

#包含

# include 'complex.h '

void main () )

{

}

… …

complex z1、z2、z3、z4、z;

float RealPart,ImagPart;

initcomplex(z1、8.0、6.0 );

init complex (z2,4.0,3.0 );

add(Z1、z2、z3 );

多工(Z1,z2,z4 );

if(division(Z4,z3,z ) ) }

获取真实(z,RealPart );

getimag(z,ImagPart );

}//if

ADT有两个重要特征:

在将数据抽象化并用ADT记述程序处理的实体时,

强调其本质特征、可以做到的事情

功能及其与外部用户的接口,即外部

使用它的方法)

数据封装实现实体的外部特性及其内部实现

详细信息将被分离,并对外部用户隐藏

全部实现的详细情况

抽象数据类型的描述方法

抽象数据类型可以用(d,s,p )三元组表示

其中,d是数据对象,

s是d上的关系集

p是对d的基本操作集。

ADT抽象数据类型名称{

数据对象:“定义数据对象”

数据关系:定义数据关系

基本操作:“基本操作定义”

} ADT抽象数据类型名称

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

基本操作名称(参数表)

初始条件:“初始条件说明”

操作结果:“操作结果说明”

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

除了可以在开头参照参数来指定输入值之外,

操作结果也将返回。

初始条件描述操作执行前的数据结构

参数应满足的条件,不满足时操作

失败,返回适当的错误消息。

操作结果,操作成功完成后,数量

取决于结构的变化情况和应该返回的结果。 如果

初始条件为空时省略。

抽象数据类型的表示和实现

抽象数据类型需要通过唯一的数据

类型(用高级编程语言实现的数据

类型)来实现。

例如,对于上面定义的复数

typedef struct {

浮动真实零件;

浮动图像零件;

}complex;

//-----存储结构定义

//-----基本操作的函数原型说明

voidassign(complexz,

float realval,float imagval;

//构成复数z,其实部和虚部分别被赋予参数

//realval和imagval的值

浮动获取真实(cpmplexz;

//返回复数z的实部值

floatgetimag(cpmplexz );

//返回复数z的虚部的值

voidadd(complexZ1、complex z2、

complex sum;

//用sum返回两个复数z1,z2之和

//-----基本操作的实现

voidadd(complexZ1、complex z2、

complex sum ) {

//用sum返回两个复数z1,z2之和

sum.real part=Z1.real part z2.real part;

sum.imag part=Z1.imagpartz2. imag part;

}

{其他省略}

1.3算法和算法度量

一.算法

二.算法设计原则

三.算法效率的衡量方法和指南

四.算法存储空间需求

算法是为解决某类问题而规定的一种

有限长度的操作序列。 一个算法必须满

以下五个重要特征:

1 .有穷性2 .确定性3 .可行性

4 .有输入5 .有输出

一.算法

1 .为具有贫穷性的任意组合法输入值,然后在

有穷步必有终,即:

算法的各个步骤可以在有限时间内完成;

2 .每种情况下应切实执行的操作

制作,算法有准确的规定,算法的

执行者和观众都可以明确其含义和执行方法

是的。 而且在任何条件下算法都只有一个

执行路径;

3 .可行性算法的所有操作必须充分

基本上,可以通过已经实现的基本操作来搬运

以有限的次数实现

教务网教务系统

教务网教务系统

一些输入量

在算法运行过程中需要输入,取决于算法

表面上可以没有输入,实际上已经计算过了

法律中;

5 .有输出。 这是“输入”和

确实

决定关系大小的是基于算法的信息加法

工作后得到的结果是,这种确定关系即

是算法的功能。

二.算法设计原则

设计算法时,通常需要考虑实现以下目标:

1 .准确性

2 .可读性

3 .健壮性

4 .高效率和低存储需求

1 .准确性

首先,算法必须满足特定的“规范中说”

“明”方式的需求。

其次,我们可以理解算法是否“正确”

这四个级别包括:

a .程序不含语法错误

b .程序对一些输入数据

满足要求的结果;

c .程序经过仔细选择、典型、严格

刁难的一些输入数据是令人满意的

要求的结果;

通常,以第c层语义的正确性为平衡

衡量算法是否合格的标准。

d .程序可以对所有合法的输入数据获得

得出满足要求的结果

2 .可读性

算法主要是为了人的阅读和交流,

其次是为计算机执行。 所以算法应该很简单

人的理解; 另一方面,难以读取的程序

容易隐藏很多错误,调试很难

3 .健壮性

如果输入的数据不正确,算法必须合适

进行反映或者相应的处理,而不是生产

产生奇怪的输出。 然后进行处理

错误的方法不是中断程序的执行

返回错误或表示错误性质的值。

为了在更高的抽象水平上处理。

4 .高效率和低存储需求

通常,效率是指算法的执行

时间; 存储是算法的执行过程

所需的最大存储容量。 哪个都是

关系到问题的规模。

三.算法效率的

测量方法和指南

通常有两种测量算法效率的方法:

事后统计法

先验分析估计法

坏处: 1。 必须执行程序

2。 其他因素隐藏算法的本质

与算法执行时间相关的因素:

1 .算法选择的策略

2 .问题的规模

3 .编程语言

4 .编译器生成的机器代码质量

5 .计算机执行指令的速度

特定算法的“执行工作量”

的大小只取决于问题的规模

(通常用整数n表示),或者,

那是问题规模的函数。

假设,随着问题规模n的增大,

算法执行时间的增长率和f(n )的增加

如果比率相同,可以写如下。

t(n )=o ) f ) n ) )

将t(n )称为算法的(渐近)时间复杂度

怎么估算

算法的时间复杂性?

算法=控制结构的原始操作

(固有数据类型操作)

算法的执行时间=

原始操作(I )的执行次数原始操作(I )的执行时间

算法的执行时间

与原始操作执行次数之和成比例

从算法中选出一个对研究的问题

问题是基本操作的原操作,这个

算法中重复执行基本操作的次数

作为算法执行时间的衡量标准。

范例

双脚

力矩

阵形

voidmult(inta (,int b[] ),int c[] ) )。

//用2维排列收纳矩阵要素,设c为a和b的积

for(I=1; i=n; I )

for(j=1; j=n; j ) {

c[i,j]=0;

for(k=1; k=n; k )

c[i,j] =a[i,k]*b[k,j];

} //for

} //mult基本操作:乘法操作

时间复杂度:o(n3 ) )。

范例

选择

选择

排队

voidselect_sort(inta[],int n ) {

//A中的整数序列从小到大排列为整数序列。

} //select_sort

基本操作:

比较(数据元素)操作

时间复杂度:o(N2 ) ) )。

j=i;//选择第I个最小元素

for(k=I1; k n; k )

if(a ) k ) a ) j ) j=k;

for(I=0; i n-1; I ) {

if(j!=i ) a[j] a[i]

}

范例

起床

泡沫

排队

voidbubble_sort(inta[],int n ) {

//A中的整数序列从小到大排列为整数序列。

for(I=n-1,change=TRUE; i1变更; -I )

} //bubble_sort

基本操作:代入操作

时间复杂度:o(N2 ) ) )。

{ change=FALSE; //change是交换元素的标志

for(j=0; j a[j 1] )

{ a[j] a[j 1]; 更改=真; }

() /一次起泡

四.算法存储空间需求

算法的空间复杂度被定义为:

随着问题规模n的增大,

运行算法所需的存储增长率

与g(n )的增长率相同。

s(n )=o ) g ) n ) )

算法的存储量为:

1 .输入数据所占的空间

2 .程序本身所占的空间

3 .辅助变量所占空间。

如果输入数据所占空间仅取决于问题

它本身与算法无关,只是分析和消除

输入和程序以外的辅助变量额外占

空间。

所需额外空间相对于输入数据量

在常数的情况下,这种算法称为原地功。

如果所需的内存量取决于特定输入,则为、

通常在最坏的情况下考虑。

1 .熟悉和掌握各名词、术语的含义

基本概念。

2 .理解算法五个元素的确切含义。

本章的学习要点

3 .掌握计算语句的频率和估计算法时

之间复杂性的方法。

1.1.4(1.8

1.6 1.19 1.20

本章的工作

((考试问题) ) ) ) ) ) ) )。

随机看看

NEW ARTICLE

标签

Tag