1、教 案 封 皮开课单位 信息工程学院 课程名称 数据结构授课教师 郭晓利 授课对象 计机、软件 13 合选用教材 数据结构 总学时 2课次 1 第 一 章 第 节教学目的及要求 掌握数据结构的基本概念、理解常用术语 掌握数据元素间的 3 种结构关系 掌握算法的定义及特性 初步掌握分析算法的时间复杂度和空间复杂度的方法教学重点 数据结构的基本概念、数据元素间的 3 种结构关系、时间复杂度和空间复杂度教学难点 时间复杂度和空间复杂度教学方式、方法 理论教学、多媒体授课教学过程及时间分配第一学时(45 分钟)1.1 数据结构的基本概念1 、数据结构实例 2 、数据结构概念第二学时(45 分钟)1.2
2、 算法和算法分析(40 分)课后小结(5 分)教 案内 容 备 注1.1 数据结构的基本概念1.1.1 数据结构实例 【例 11】最短路径问题。如图 1.1 所示,假设有 A,B,C,D,E,F 六座城市,图中的带箭头的连线表示城市间有开通的单向航班,弧上的数值表示该航班飞行所需要的时间,请问,如果要从城市 A 出发去城市 F(中间可以在其他城市换机,并忽略换机时间) ,耗费时间最少的路径是什么?图 1.1 最短路径问题示意图数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。1.1.2 数据结构概念1数据 数据是信息的载体,是对客观事物的符号表示。通
3、俗地说,凡是能被计算机识别、存取和加工处理的符号、字符、图形、图像、声音、视频信号、程序等一切信息都可以称为数据。2数据元素数据元素是对现实世界中某独立个体的数据描述,是数据的基本单位。3数据对象数据对象是具有相同性质的数据元素的集合,是数据的一个子集。例如,字母字符数据对象是集合 C=A,B,C,Z。4数据结构数据结构是相互之间存在一种或多种特定关系的数据元素的集合。基本的数据结构有如下 3 类。 (1)线性结构。结构中的数据元素之间存在一个对一个的关系。(2)树型结构。结构中数据元素之间存在一个对多个的关系。(3)图结构或网结构。结构中的数据元素之间存在多个对多个的关系。图 1.2 描述了
4、这 3 种数据结构。3 种数据结构可以划分为两大类:线性结构和非线性结构。线性结构的逻辑特征是,有且仅有一个开始结点和一个终端结点,并且所有的结点都最多只有一个直接前驱和一个直接后继。非线性结构的逻辑特征是一个结点可能有多个直接前驱和直接后继。非线性结构包括树型结构和图结构。图 1.2 3 类基本数据结构示意图5 逻辑结构 逻辑结构描述的是数据元素之间的逻辑关系。通常说的线性结构、树形结构和图结构就是指数据元素的逻辑结构。 6. 存储结构存储结构(又称物理结构)是数据结构在计算机中的表示。具有某种逻辑结构的数据元素在计算机中有顺序映像和非顺序映像两种不同的表示方法,由此得到两种不同的存储结构
5、顺序存储结构和链式存储结构。1.2 算法和算法分析1.2.1 算法(Algorithm)算法是解决特定问题的方法,是对数据施加的一系列操作。严格地说,算法是由若干指令组成的有限序列。一种算法必须具有以下 5 个特性。(1)有穷性。一个算法包括的指令数必须有限,每一条指令的执行次数也必须有限。(2)确定性。算法的每一条指令必须有确切的定义,无二义性。(3)可行性。算法中的每一条指令都可以通过有限次、可实现的基本运算且在有限的时间内实现。(4)输入。一个算法具有零个或多个输入。(5)输出。一个算法具有一个或多个输出。算法设计的要求如下。(1)正确性。算法的执行结果应当满足预先设定的功能和要求。在实
6、际应用中,算法的“正确性”有多个层次的含义。(2)可读性。一个算法应当思路清晰、层次分明、易读易懂,有利于人对算法的理解。(3)健壮性。当输入非法数据时,应能作适当反应和处理,不至引起莫名其妙的后果。(4)高效性和低存储量。对同一个问题,执行时间越短,算法的效率就越高;完成相同的功能,执行算法时所占用的存储空间应尽可能少。122 算法分析算法执行时间需要根据该算法编制的程序在计算机上的执行时间来确定。一个算法所耗费的时间等于算法中每条语句的执行时间之和。每一条语句的执行时间是该语句的执行次数(frequency count,频度)与该语句执行一次所需时间的乘积,而每条语句的执行时间取决于其对应
7、机器指令的执行时间。一个使用高级程序语言编写的程序在计算机上运行所需时间取决于如下因素。(1)使用何种程序设计语言。实现编程语言的级别越高,其执行效率就越低。(2)选用何种策略的算法。(3)算法涉及问题的规模(求解问题的输入量,通常用 n 表示)。例如,求50 以内的素数与求 1000 以内的素数的执行时间必然是不同的。(4)编译程序所生成目标代码的质量。对于代码优化较好的编译程序,所生成的程序质量较高。(5)机器执行指令的速度。(6)计算机的体系结构。并行计算通常能缩短算法的计算时间。1算法的时间复杂度通常,使用算法中所有语句的频度之和 f(n)表示该算法所需的时间。在假定执行一条语句需要的
8、时间固定的情况下,语句的数量能大致表示算法运行所需的时间,因此,f(n)粗粒度地描述了一个算法所需时间。假设当问题规模n 趋向于无穷大时,有下式成立:T(n)= O(f(n) (1 1)它表示随着问题规模的扩大,T(n)的增长率和 f(n)的增长率相同。称T(n)为算法的渐近时间复杂度(asymptotictime complexity),简称为时间复杂度(time complexity)。【例 12】交换 A 和 B 的内容。(1)temp=A;(2)A=B;(3)B=temp;这 3 条语句的频度都是 1,f(n)=3。所以,该程序的执行时间与问题规模无关,f(n)=3。算法的时间复杂度为
9、常数阶,记为 T(n)= O(1)。2、算法的空间复杂度一个算法在机器上运行时需要占用存储空间,这些存储空间主要包括两部分:第一部分用于存放算法本身的指令、常数、变量和输入数据;第二部分是对数据进行操作时所需的辅助空间。在通常情况下,对同一类问题,输入数据的表示形式是相同的,这时,可以近似认定第一部分的存储空间是固有的,而第二部分存储空间是额外的,分析算法的空间占有情况重点是分析其额外存储空间的占有情况。通常,一个算法的空间复杂度(space complexity)反映了程序运行从开始到结束所需的额外存储量。通常使用“大 O 表示法”表示。 S(n)=O(f(n)。课后小结:1.数据结构常用术
10、语2.掌握数据元素间的 3 种结构关系3.算法的时间复杂度和空间复杂度的方法教 案 封 皮开课单位 信息工程学院 课程名称 数据结构授课教师 郭晓利 授课对象 计机、软件 13 合选用教材 数据结构 总学时 2课次 2 第一 章 第 节教学目的及要求 掌握 C 语言中的数据类型教学重点 C 语言中的数据类型教学难点 C 语言中的数据类型教学方式、方法 理论教学、多媒体授课教学过程及时间分配第一学时(45 分钟)复习(5 分)算法描述语言(40 分)第二学时(45 分钟)C 语言的数据类型(40 分)课后小结(5 分)教 案内 容 备 注1.3 算法描述与 C 语言数据类型131 算法描述语言(
11、1)数据类型本书中所使用的算法描述语言的数据类型包括 C 语言中的所有数据类型(整型、实型、字符型、数组、指针、结构、共用体等) 。 (2)变量和符号常量变量的定义形式为:数据类型 变量名序列;符号常量的定义形式为:#define 符号常量名 常量值;(3)数据运算数据运算主要包括算术运算、关系运算和逻辑运算三种。算术运算符有:+、-、*、/、%、+、- 等; 关系运算符有:、=、和下标运算符 。(4)赋值语句赋值语句的形式为:变量名=表达式;在表达式中,除了可以出现上述数据运算之外,还可以出现常用的数学符号,如、等。(5)控制语句控制语句包括:选择语句,包括条件语句、多项选择语句。条件语句的
12、形式为:if(条件表达式)语句块;或if(条件表达式)语句块 1;else语句块 2;多项选择语句的形式为:switch(表达式)case 常量表达式 1:语句块 1;break;case 常量表达式 2:语句块 2;break; default:语句块 n;循环语句,包括 for 语句、while 语句和 do-while 语句。for 语句的形式为:for(循环变量初始表达式;终止条件表达式;循环变量修改表达式)语句块;while 语句的形式为:while(条件表达式 )语句块;do-while 语句的形式为:do语句块;while(条件表达式);(6)函数的定义、声明与调用函数的定义形式
13、为:返回类型 函数名(形式参数列表 )函数定义语句块;函数的声明形式为:返回类型 函数名(形式参数列表 );函数的调用形式为:函数名(实际参数列表);(7)输入、输出输入语句为:scanf(格式字符串,输入变量序列) ;输出语句为:printf(格式字符串,输出表达式序列);(8)结束语句异常结束语句 exit,其形式为:exit(异常代码);(9)注释注释语句的形式为:*注释内容*132 C 语言的数据类型C 语言的数据结构是以数据类型形式出现的。C 的数据类型如下:1321 基本数据类型1、整型数据整型常量即整型常数。 如 123,-456 等。可以用以下 6 种基本整型。即有符号基本整型
14、 signed int无符号基本整型 unsigned int有符号短整型 signedshort int无符号短整型 unsigned short int有符号长整型 signedlong int无符号长整型 unsigned longint2、 实型数据实型常量即实数。如 123.345,6.45e6 等。实型变量分为单精度(float 型) 、双精度(double 型)和长双精度(long double)三类。如:float x, y; (指定 x、y 为单精度实数)double z; (指定 z 为双精度实数)long double t; (指定 t 为长双精度实数)3、 字符数据C
15、的字符常量是用单引号括起来的一个字符。如a,A 等都是字符常量。1322 构造类型1、数组类型数组的定义方式如下所示:数据类型 数组名常量表达式 ;系统会自动地根据初值的个数来判断数组的长度,例如:int a =1,2,3,4,5;2、结构体类型结构变量的定义格式如下:首先,定义所需的结构类型:struct 结构名称 成员定义列表;也可以将变量的定义直接跟在结构类型定义之后:struct 结构名称成员定义列表 ;变量名列表;3、共用体类型共用体的定义、使用方法与结构体类似,也同样利用“ ”运算符来访问共用体变量的成员,例如:union valueint i;char c;float f;dou
16、ble d;value1;共用体变量一次只能存放一个成员的值,也就是说,当程序给其中的一个成员赋值时将会覆盖其他成员的值。4、枚举 所谓“枚举”就是将变量的值一一列举出来,变量的取值只限于列举出来的值的范围之内,它也属于构造类型。1323 指针类型指针变量定义的一般形式为:数据类型 *指针变量名;在 C 语言中,指针运算符“* ”表示“指向” ,表示指针变量与它所指向的变量之间的联系。操作符“2 int *p;3 p=4 a=10;5 b=*p;除了上述数据类型外,还可以定义新的数据类型来取代已有的数据类型名。定义形式为:typedef 已有数据类型名 新的数据类型名;例如:typedef int Status;课后小结:数据结构概念算法时间、空间复杂度