《数据结构》教案.docx
《《数据结构》教案.docx》由会员分享,可在线阅读,更多相关《《数据结构》教案.docx(20页珍藏版)》请在冰豆网上搜索。
《数据结构》教案
《数据结构》教案
信息技术学院
软件教研室
课程说明
【目的】
1.数据结构是研究数据组织、存储和运算的一般方法的学科。
——理解并掌握数据的各种数据结构的原理与算法。
2.学会分析研究计算机加工的数据结构的性质,以便为应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的技术。
3.数据结构是编程的基础。
程序=数据结构+算法
——能够以数据结构为基础,进行复杂程序编程,且符合软件工程的规范。
4.数据结构课程重点是培养学生的数据抽象能力。
【内容】
1.数据结构的基本概念(第1章)
2、线性表(第2、3、4、5章)
3、树(第6章)
4、图(第7章)
5、查找和排序(第9、10、11章)
【参考书】
1.数据结构严蔚敏清华大学出版社
2.数据结构(c语言篇)——习题与解析(修订版)李春葆清华大学出版社
3.
【教学安排】
课时分配表1计算机与信管专业43+8=51
章目
内容
讲课时数
实验时数
第一章
绪论
2
第二章
线性表
6
2
第三章
栈和队列
4
2
第四章
串
1
第五章
数组和广义表
2
第六章
树和二叉树
10
2
第七章
图
10
2
第九章
查找
4
第十章
排序
4
合计51
43
8
第1章绪论
【教学目的】
1.数据结构的基本概念,介绍数据和数据结构等名词和术语。
2.描述算法的类C语言
3.从时间和空间角度分析算法的方法
【教学要求】
掌握基本概念,了解抽象数据类型,掌握计算语句频度和估算算法时间复杂度,熟悉类C语言的书写规范。
【教学重点与难点】
描述算法的类C语言;抽象数据类型的概念;算法复杂性的分析方法
【教学追记】
1、熟悉各名词、术语的含义,掌握基本概念,特别是数据结构的三个方面(逻辑结构、存储结构、及其运算)。
数据的逻辑结构和存储结构之间的关系。
分清哪些是逻辑结构的性质,哪些是存储结构的性质。
2、了解抽象数据类型的定义、表示和实现方法。
3、理解算法五个要素的确切含义:
①动态有穷性(能执行结束);②确定性(对于相同的输入执行相同的路径);③有输入;④有输出;⑤可行性(用以描述算法的操作都是足够基本的)。
4、掌握计算语句频度和估算算法时间复杂度的方法。
5、熟悉类C语言的书写规范,对学过C++的学生,比较输入/输出语句cin/cout;动态分配内存语句new与C语言的区别。
6、本章的授课方法:
讲授为主,自学为辅,通过练习掌握概念和方法,可以通过1个编程,理解抽象数据类型的概念
【教学内容】
1.什么是数据结构
2.基本概念和术语
3.抽象数据类型的表示与实现
4.算法和算法分析
1.1什么是数据结构
一、计算机解决具体问题的步骤
1、从具体问题抽象出一个适当的数学模型;
2、设计解此数学模型的算法;
3、编程,进行测试、调整直至得到最终解答。
对数值计算问题可以用数学方程来描述。
但是,对许多非数值计算问题无法用数学方程加以描述。
需要用表、树、图等数学模型来描述。
二、非数值问题的三个例子
1、图书馆的书目检索系统自动化问题;——表
2、计算机和人对弈问题;——树
3、多叉路口交通灯的管理问题。
——图
例1-1书目自动检索系统
分析:
在图书馆需要查阅图书目录卡片,可以利用计算机实现自动检索。
计算机处理的对象是数目信息,可以由登录号、书名、作者名、分类号、出版单位和出版时间等组成。
在书目自动检索系统中可建立一张按登录号顺序排列的书目文件和三张分别按书名、作者名、分类号顺序排列的索引表。
这四张表构成的文件便是书目自动检索的数学模型。
Seepage2图1.1
类似的问题还有查号系统自动化、仓库帐目管理等。
结论:
在这类文档管理的数学模型中,计算机处理的对象之间通常存在着的是一种最简单的线性关系(一对一),这类数学模型可称为线性的数据结构。
——表
例1-2计算机和人对奕问题
分析:
计算机能和人对弈是因为有人将对弈的软件事先存入计算机。
●在对弈问题中,计算机操作的对象是对弈过程中可能出现的棋盘状态称为格局。
●格局之间的关系是由比赛规则决定的,这个关系不是线性的。
从一个格局可派生出几个格局。
见p2图1.2
●若将从对弈开始到结束的过程中所有可能出现的格局都画在一张图上,则可得到一棵倒长的“树”。
●“树根”是对弈开始之前的棋盘格局,而所有的“叶子”就是可能出现的结局,对弈的过程就是从树根沿树叉到某个叶子的过程。
结论:
在人-机对弈问题的数学模型中,计算机处理的对象之间通常存在着一种“树”的关系。
“树”可以是某些非数值计算问题的数学模型,它也是一种数据结构。
例1-3多叉路口交通灯管理问题
分析:
在多叉路口需设几种颜色的交通灯才能既使车辆相互之间不碰撞,又能达到车辆的最大流通。
见P3图1.3
通常,这类交通、道路问题的数学模型是一种称谓“图”的数据结构。
●图中的一个顶点表示一条通路,而通路之间矛盾的关系以顶点间的连线表示。
●本问题等价为对图的顶点的染色问题,要求对图上的每个顶点染一种颜色。
且要求有线连接的两个顶点不能具有相同颜色,而总的颜色种类应尽可能地少。
结论:
这类交通、道路问题的数学模型是一种称为“图”的数据结构。
小结
以上三个例子可见,描述这类非数值计算问题的数学模型不再是数学方程,而是诸如表、树和图之类的数据结构。
数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等等的学科(非定义)。
三、数据结构的概念
1、数据结构是指同一数据元素类中各数据元素之间存在的关系。
2、数据结构又可以分为下述三个组成部分,它们分别是数据的逻辑结构、数据的存储结构和数据的运算。
数据的逻辑结构:
数据元素之间的逻辑关系
数据的存储结构:
数据元素及其关系在计算机存储器中的表示
数据的运算:
定义一组有关数据元素的运算
3、定义小结:
定义包括三方面:
它们分别是数据的逻辑结构、数据的存储结构和数据的运算
逻辑关系相同,存储方式不同,也为不同的数据结构。
基本运算:
插入、删除、修改、查找、排序等。
4、学习数据结构的意义:
根据数据处理问题的需要,为待处理的数据选择合适的结构(逻辑结构和存储结构),进而设计出比较满意的算法。
1.2基本概念和术语
1.数据(Data):
是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
例:
整数、实数、图象、声音等。
2.数据元素(DataElement):
是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
有时,一个数据元素可以由若干个“数据项(DataItem)”组成。
例:
一本书的书目信息为一个数据元素,而书目信息中的每一项为一个数据项。
3.数据对象(DataObject):
是性质相同的数据元素的集合,是数据的一个子集。
例:
整数数据对象等。
例如:
数据对象:
信息管理的学生
数据元素:
学生的基本信息{张三,男,20,信息管理}
数据项:
每条信息中的组成项
4、数据的基本结构:
数据元素相互之间关系称为结构。
根据数据元素之间关系的不同特性,有四种基本结构:
P5图1.5
(1)集合:
结构中的数据元素之间存在“同属一个集合的关系”,此外别无关系。
(2)线性结构:
元素之间存在一个对一个的关系。
(3)树形结构:
元素之间存在一个对多个的关系。
(4)图状结构(网状结构):
元素之间存在多个对多个的关系。
图示见5页。
5.数据(逻辑)结构的形式定义:
为一个二元组
Data_Structure=(D,S)
其中:
D是数据元素的有限集,S是D上关系的有限集。
例1-4、例1-5P5
6、数据的逻辑结构:
数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
可以看作是从具体问题抽象出来的数学模型。
即数据的逻辑关系是数据之间必然存在的联系,这种联系或是内在,或根据需要人为定义的,所以被看作是“逻辑”上的联系。
有时,也把数据结构称作数据的逻辑结构。
7.数据的物理结构:
数据的(逻辑)结构在计算机存储器中的表示(又称映象)。
又称存储结构。
它包括数据元素的表示和关系的表示。
名词:
位、元素或结点、数据域
位:
计算机中表示信息的最小单位是二进制数的一位,叫bit;
元素:
计算机中可用一个由若干位组合形成的一个位串表示一个数据元素,称这个位串为元素或结点;
数据域:
当数据元素由若干数据项组成时,位串中对应于各个数据项的子位串称为数据项。
8、数据元素之间关系在计算机中的两种表示及对应的存储结构*:
数据元素之间的关系在计算机中有两种不同的表示方法:
顺序映象和非顺序映象,并由此得到两种不同的存储结构:
顺序存储结构和链式存储结构。
9、顺序映象及非顺序映象的特点*
顺序映象的特点是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。
非顺序映象的特点是借助指示元素存储地址的“指针(Pointer)”表示数据元素之间的逻辑关系
10、数据结构与算法的关系:
数据的逻辑结构和物理结构是密切相关的两个方面;
算法的设计取决于选定的逻辑结构,而算法的实现依赖于采用的存储结构。
11、虚拟存储结构:
本书在高级语言的层次上讨论数据结构的操作,可以借用高级语言中提供的“数据类型”来描述存储结构。
则称它为虚拟存储结构。
12、数据类型及分类
数据类型(DataType):
是一个值的集合和定义在这个值集上的一组操作的总称。
高级程序语言中的数据类型可以分为两类:
一类是非结构的原子类型;另一类是结构类型。
13、抽象数据类型(AbstractDataType即:
ADT):
●抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。
抽象数据类型仅考虑其逻辑特性,而与其在计算机内部如何表示和实现无关。
●一个含抽象数据类型的软件模块通常应包含定义、表示和实现三个部分。
●抽象数据类型可用三元组表示:
(D,S,P)
其中,D是数据对象,S是D上的关系集,P是对D的基本操作集。
抽象数据类型的定义:
ADT抽象数据类型名{
数据对象:
<数据对象的定义>
数据关系:
<数据关系的定义>
基本操作:
<基本操作的定义>
}ADT抽象数据类型名
基本操作的定义格式为:
基本操作名(参数表)(相当于函数的定义)
初始条件:
<初始条件描述>
操作结果:
<操作结果描述>
基本操作有两种参数:
(1)赋值参数只为操作提供输入值;
(2)引用参数以&打头,除可提供输入值外,还将返回操作结果。
例1-6,(9页)抽象数据类型三元组的定义
第一章作业
(1)
一、单项选择题
1.数据结构是一门研究非数值计算的程序设计问题中计算机的
(1)以及他们之间的
(2)和运算等的学科。
(1)A.操作对象B.计算方法C.逻辑存储D.数据映象
(2)A.结构B.关系C.运算D.算法
2.数据结构被形式的定义为(K,R),其中K是
(1)的有限集合,R是K上的
(2)有限集合。
(1)A.算法B.数据元素C.数据操作D.逻辑结构
(2)A.操作B.映象C.存储D.关系
3.在数据结构中,逻辑上可把数据结构分成().
A.动态结构和静态结构B.紧凑结构和非紧凑结构
C.线性结构和非线性结构D.内部结构和外部结构
4.线性表的顺序存储结构是一种
(1)的存储结构,线性表的链式存储结构是一种
(2)的存储结构.
A.随机存取B.顺序存取C.索引存取D.散列存取
5.线性表逻辑顺序与存储顺序总是一致的,这种说法():
A.正确B.不正确
6.线性表若采用链式存储结构时,要求内存中可用存储单元的地址()
A.必须是连续的B.部分地址必须是连续的
C.一定是不连续的D.连续或不连续都可以
7.每种数据结构都具备三个基本运算:
插入,删除和查找,这种说法()
A.正确B.不正确
二.填空题
1.数据逻辑结构包括
(1),
(2)和(3)三种类型,树形结构和图形结构合称为(4)
2.在线性结构中,第一个结点
(1)前驱接点,其余每个结点有且只有
(2)个前驱结点;最后一个结点(3)后续结点,其余每个结点有且只有(4)个后续结点.
3.在树形结构中,树根结点没有
(1)结点,其余每个结点有且只有
(2)个前驱结点;叶子结点没有(3)结点,其余每个结点的后续结点可以(4).
4.在图形结构中,每个结点的前驱结点和后续结点数可以().
5.线性结构中元素之间存在
(1)关系,树形结构中元素之间存在
(2)关系,图形结构中元素之间存在(3)关系.
6、A=(K,R)
K={a,b,c,d,e}
R={r}
r={,,,}写出其逻辑结构
7、B=(K,R)
K={a,b,c,d,e,f,g,h}
R={r}
r={,,,,}写出其逻辑结构
1.3抽象数据类型的表示和实现
本书采用类C语言描述算法。
采用类C语言使得数据结构和算法的描述和讨论简明清晰,不拘泥于C语言的细节,又能容易转换成C或者C++程序。
类C语言是标准C语言的简化
(1)预定义常量和类型:
P10#define语句和typedef语句
(2)数据结构的表示(存储结构)用类型定义typedef描述。
数据元素类型约定为ElemType,由用户在使用该数据类型时自行定义。
(3)基本操作的算法都用以下形式的函数描述:
函数类型函数名(函数参数表){
//算法说明
语句序列
}//函数名
(4)赋值语句有:
(5种)P10
(5)选择语句有:
(4种)P10
(6)循环语句有:
(3种)P10-11
(7)结束语句有:
(3种)P11
(8)输入和输出语句有:
(2种)P11(注意在C++中对应的语句)
(9)注释:
(1种)P11
(10)基本函数有:
(7种)P11
(11)逻辑运算约定:
(&&、∣∣、!
)P11
例1-7(P11-13)抽象数据类型Triplet的表示和实现。
练习:
抽象数据类型复数的定义、表示和实现
1.4算法和算法分析
一、算法(Algorithm)
1.它是对特定问题求解步骤的一种描述,是指令的有限序列,
其中每一条指令表示一个或多个操作。
2.算法具有下列五个重要特性:
1)有穷性
(2)确定性(3)可行性(4)输入(5)输出
二、算法设计的要求
1、正确性(Correctness):
“正确”含义的四个层次:
P14
2、可读性(Readability):
便于交流和理解。
3、健壮性(Robustness):
输入数据非法时,算法应能作出反应或处理(容错性)。
4、效率与低存储量需求:
效率指的是算法执行时间。
低存储量指算法执行过程中所需要的最大存储空间。
三、算法效率的度量
1、一个算法所需的运算时间通常与所解决问题的规模大小有关。
2、用n表示问题规模的量,把算法运行所需的时间T表示为n的函数,记为T(n)
3、不同的算法,当n增长时,运算时间T(n)增长的快慢很不相同
4、一个算法所需的执行时间就是该算法中所有语句执行时间之和
每条语句的执行时间是该语句的执行次数与该语句执行1次所需时间的乘积。
假定每条语句执行1次的时间为单位时间1
5、一个算法所需的执行时间就是该算法中所有语句执行次数之和。
6、算法的时间复杂度:
当n逐渐增大时T(n)的极限情况,称为渐进时间复杂度,简称为时间复杂性。
为了分析方便,时间复杂度常用数量级的形式来表示,记作
T(n)=O(f(n))。
其中,大写字母O为Order(数量级)的字头,f(n)为函数形式,如T(n)=O(n2)。
7、语句的频度(FrequencyCount)指的是该语句重复执行的次数。
例:
三个程序段P15。
8、用数量级的形式表示T(n),当T(n)为多项式时,可只取其最高次幂项,且它的系数也可略去不写
T(n)=8n3+150n+32
T(n)=O(n3)
9、一般情况下,对一个问题(或算法)只需选择一种基本操作来讨论算法的时间复杂度即可,有时也需要同时考虑几种基本操作,甚至可以对不同的操作赋以不同的权值。
原操作的选取:
多数情况下它是最深层循环语句中的原操作。
例:
如下所示N×N矩阵相乘的算法中,“乘法”运算是“矩阵相乘问题”的基本操作。
整个算法的执行时间与该基本操作(乘法)重复执行的次数n3成正比,记作T(n)=O(n3)。
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
{
c[i,j]=0;①(执行次数n*n)
for(k=1;k<=n;++k)
c[i,j]+=a[i,k]*b[k,j];②(执行次数n*n*n)
}
10、一般地,对于足够大的n,常用的时间复杂性存在以下顺序:
O
(1)≤O(log2n)≤O(n)≤O(nlog2n)≤O(n2)≤O(n3)≤…≤O(2n)
11、算法的运行时间往往还与具体输入的数据有关
12、通常用以下两种方法来确定一个算法的运算时间:
(1)平均时间复杂性:
研究同样的n值时各种可能的输入,取它们运算时间的平均值。
(2)最坏时间复杂性:
研究各种输入中运算最慢的一种情况下的运算时间。
时间复杂度一般是指在最坏情况下的时间复杂度。
例1.1计算下面交换i和j内容程序段的时间复杂性。
temp=i;
i=j;
j=temp;
解:
以上三条单个语句均执行1次,该程序段的执行时间是一个与问题n无关的常数,因此,算法的时间复杂度为常数阶,记作T(n)=O
(1).
例1.2计算下面求累加和程序段的时间复杂性
(1)sum=0;(一次)
(2)for(i=1;i<=n;i++)(n次)
(3)for(j=1;j<=n;j++)(n2次)
(4)sum++;(n2次)
解:
T(n)=2n2+n+1=O(n2)
补充例题
语句1的频度是n-1
语句2的频度是(n-1)*(2n+1)=2n2-n-1
f(n)=2n2-n-1+(n-1)=2n2-2
该程序的时间复杂度T(n)=O(n2)
1)分析下面程序段的时间复杂度
for(i=1;i{
y=y+1;①
for(j=0;j<=(2*n);j++)
x++;②
}
2)分析下面程序段的时间复杂度:
分析:
语句1的频度是1
设语句2的频度是f(n)
则:
2f(n)<=n
f(n)<=log2n取最大值f(n)=log2n
则,该程序的时间复杂度T(n)=O(log2n)
i=1;①
while(i<=n)
i=i*2;②
3)分析下面程序段的时间复杂度:
a=0;b=1;①
语句1的频度:
2
语句2的频度:
n
语句3的频度:
n-1
语句4的频度:
n-1
语句5的频度:
n-1
则:
T(n)=2+n+3(n-1)=4n-1=O(n)
for(i=2;i<=n;i++) ②
{
s=a+b; ③
b=a; ④
a=s; ⑤
}
四、算法的存储空间需求
以空间复杂度作为算法所需存储空间的量度,记做:
S(n)=O(f(n))
其中n为问题的规模(或大小)
第一章作业
(2)
1.算法分析的目的是
(1),算法分析的两个主要方面是
(2):
(1)A.找出数据结构的合理性
B.研究算法中的输入和输出的关系
C.分析算法的效率以求改进
D.分析算法的易懂性和文档性
(2)A.空间复杂性和时间复杂性
B.正确性和简明性
C.可读性和文档性
D.数据复杂性和程序复杂性
2.计算机算法指的是
(1),它必须具备输入,输出和
(2)等五个特性.
(1)A.计算方法B.排序方法C.解决问题的有限运算序列D.调度方法
(2)A.可行性,可移植性和可扩充性
B.可行性,确定性和有穷性
C.确定性,有穷性和稳定性
D.易读性,稳定性和安全性
3.算法设计的要求是()
4.下面程序段的时间复杂度是:
(1)for(i=0;ifor(j=0;jA[i][j]=0;
5.下面程序段的时间复杂度是():
(1)s=0;
for(i=0;ifor(j=0;js+=B[i][j];
sum=s;
(2)i=1;
while(i<=n)
i=i*3;
本章小结
本章介绍了贯穿全书的基本概念和基本思想。
●数据结构的基本概念
数据结构
逻辑结构
物理结构
运算
●算法的描述语言——类C
●算法的时间复杂性及其分析方法
●抽象数据类型的定义、表示及其实现