主讲教师肖南峰华南理工大学计算机科学与工程学院_第1页
主讲教师肖南峰华南理工大学计算机科学与工程学院_第2页
主讲教师肖南峰华南理工大学计算机科学与工程学院_第3页
主讲教师肖南峰华南理工大学计算机科学与工程学院_第4页
主讲教师肖南峰华南理工大学计算机科学与工程学院_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程名称:1严蔚敏,吴伟民,数据结构(C语言版),清华大学出版社,2003年7月再版;中国计算机学会教育委员会,全国高等院校计算机教育研究会,计算机学科教学计划2000,内部资料;傅清祥,王晓东,算法与数据结构,电子工业出版社,2001;吴文虎,王建德,实用算法的分析与程序设计,电子工业出版社,1998;WilliamF.,WilliamT.,DataStructureswithC++,PrenticeHall,Inc.,1996;CliffordA.S.,DataStructuresandAlgorithmAnalysis,PrenticeHall,Inc.,1997。教学安排:总学时数:72学时主要参考资料:教学对象:计算机科学与工程专业的学生;计算机软件专业的学生;计算机辅修专业的学生;电类联合班的学生;网络教育学院计算机专业的学生;各类成人教育及自学考试人员;工程技术人员。2课程内容:第一章 绪论第二章 线性表第三章 栈和队列第四章 串第五章 数组和广义表第六章 树和二叉树第七章 图第八章 动态存储管理第九章 查找第十章 内部排序第十一章 外部排序第十二章 文件3第一章绪论£1.1背景

自第一台计算机1946年在美国问世以来,计算机的应用范围大大地扩展,已深入到人类社会的各个领域。与此相应的,计算机加工处理的对象也从纯粹的数值发展到字符、图像、声音等各种具有一定结构的复杂的数据。例如,从数值计算到卫星发射等等。因此要设计出一个好的程序(程序执行时间最短,占内存空间最小),必须研究数据的特性以及数据之间存在的关系。这就形成了《数据结构》这门课程。“数据结构”作为一门独立的课程,在国外是从1968年开始,而国内是在80年代初才开始。它不仅是计算机科学中的一门专业基础课,而且也是设计和实现编译程序、操作系统、数据库系统及其它系统程序和大型应用程序的重要基础。在计算机专业的教学计划中,它是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。值得注意的是,“数据结构”的发展并未终结,一方面,面向各专门领域中特殊问题的数据结构得到研究和发展,如多维图形数据结构等;另一方面,从抽象数据类型的观点来讨论数据结构,已成为一种新的趋势,越来越被人们所重视。4£1.2什么是数据结构

在图书馆内有各种名目的卡片:有按书名编排的,有按作者编排的,还有按分类编排的,等等。若利用计算机实现自动检索,则计算机处理的对象便是这些目录卡片上的书目信息。列在一张卡片上的一本书的书目信息可由登录号、书名、作者名、分类号、出版单位和出版时间等若干项组成,每一本书都有唯一的一个登录号,但不同的书目之间可能有相同的书名,或者有相同的作者,或者有相同的分类号。由此,在书目自动检索系统中可以建立一张按登录顺序排列的书目文件和3张分别按书名、作者名和分类号顺序排列的索引表,如下图所示。

例一:图书馆的书目检索系统自动化问题。001高等数学樊映川S01…002理论力学罗远祥L01…003高等数学华罗庚S01…004线性代数栾汝书S02………………数学模型—线性表5例二:计算机和人对弈问题。数学模型-树。(课本P2)例三:多叉路口交通灯的管理问题。数学模型-图。(课本P3)

由上述例子可见,描述这类非数值计算问题的数学模型不再是数学方程,而是诸如表、树和图之类的数据结构。因此,简单来说,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作的学科。

6£1.3基本概念和术语

1)数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。例如,整数、实数、字符串、图像和声音等。2)数据项:是数据不可分割的最小单位。

3)数据元素:是数据的基本单位。有时,一个数据元素可由若干个数据项组成。例如,例一中一本书的书目信息为一个数据元素,而书目信息中的每一项(如书名、作者名等)为一个数据项。

4)数据对象:是性质相同的数据元素的集合,是数据的一个子集。例如,字母字符数据对象集合C={‘A’,‘B’,…,’Z’}。

75)数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。其形式定义为:(一个二元组) Data_Structure=(D,S)其中:D是数据元素的有限集,S是D上关系的有限集。

根据数据元素之间关系的不同特性通常有下列4类基本结构:①集合:结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他关系。

②线性结构:结构中的数据元素之间存在一个对一个的关系。

③树形结构:结构中的数据元素之间存在一个对多个的关系。

④图状结构或网状结构:结构中的数据元素之间存在多个对多个的关系。集合线性树图图1.24类基本结构关系图86)数据的物理结构(又称存储结构):是数据结构在计算机中的表示。它包括数据元素的表示和关系的表示。 数据元素之间的关系在计算机中又有两种不同的表示方法:①顺序映像特点:借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。

②非顺序映像特点:借助指示元素存储地址的指针表示数据元素之间的逻辑关系。

例如:假设用两个字长的位串表示一个实数,则可以用地址相邻的4个字长的位串表示一个复数,如图1.3(a)为表示复数z1=3.0-2.3I和z2=-0.7+4.8I的顺序存储结构。图1.3(b)为表示复数z1的链式存储结构,其中实部和虚部之间的关系用值为“0415”的指针来表示(0415是虚部的存储地址)。

(a)顺序存储结构(b)链式存储结构图1.3复数存储结构示意图0300030206320634

041506110613…3.0-2.3…-0.74.8……-2.3…3.00415…97)数据类型:是一个值的集合和定义在这个值集上的一组操作的总称。

按“值”的不同特性,在高级程序语言中可分为:①原子类型:其值不可分解。例如,C语音中的基本类型(整型、实型、字符型和枚举类型)、指针类型和空类型。

②结构类型:其值是由若干成分按某种结构组成的,故可分解,并且其成分可以是非结构的,也可以是结构的。例如,数组的值由若干分量组成,每个分量可以是整数,也可以是数组等。8)抽象数据类型(ADT):是指一个数学模型以及定义在该模型上的一组操作。 抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不 变,都不影响其外部的使用。

其形式定义为:(一个三元组) (D,S,P)其中,D是数据对象,S是D上的关系集,P是对D的基本操作集。10按“值”的不同特性,可细分为:

①原子类型:属原子类型的变量的值是不可分解的。

②固定聚合类型:属该类型的变量,其值由确定数目的成分按某种结构组成。例如,复数是由两个实数依确定的次序关系构成。③可变聚合类型:和固定聚合类型相比较,构成可变聚合类型“值”的成分数目不确定。例如,可定义一个“有序整数序列”的抽象数据类型,其中序列的长度是可变的。

我们采用以下格式定义抽象数据类型:

ADT抽象数据类型名{

数据对象:<数据对象的定义>

数据关系:<数据关系的定义>

基本操作:<基本操作的定义> }ADT抽象数据类型名其中,数据对象和数据关系的定义用伪码描述,基本操作的定义格式为: 基本操作名(参数表) 初始条件:<初始条件描述>

操作结果:<操作结果描述>9)多形数据类型:是指其值的成分不确定的数据类型。

11£1.4抽象数据类型的表示与实现

1)预定义常量和类型:

//函数结果状态代码

#defineTRUE1 #defineFALSE0 #defineOK1 #defineERROR0 #defineINFEASIBLE-1 #defineOVERFLOW-2 //Status是函数的类型,其值是函数结果状态代码

typedefintStatus;2)数据结构的表示(存储结构)用类型定义(typedef)描述。数据元素类型约定为ElemType,由用户在使用该数据类型时自行定义。3)基本操作的算法都用以下形式的函数描述: 函数类型函数名(函数参数表){ //算法说明 语句序列

}//函数名 除了函数的参数需要说明类型外,算法中使用的辅助变量可以不作变量说明,必要时对其作用给予注释。124)赋值语句:简单赋值变量名=表达式;串联赋值变量名1=变量名2=…=变量名k=表达式;

成组赋值(变量名1,…,变量名k)=(表达式1,…,表达式k) 结构名=结构名;

结构名=(值1,…,值k); 变量名[]=表达式; 变量名[起始下标…终止下标]=变量名[起始下标…终止下标];交换赋值变量名变量名;条件赋值变量名=条件表达式?表达式T:表达式F;5)选择语句:条件语句1if(表达式)语句;条件语句2if(表达式)语句;

else语句;开关语句1switch(表达式){ case值1:语句序列1;break;… case值n:语句序列n;break; default:语句序列n+1;

}开关语句2switch{ case条件1:语句序列1;break;… case条件n:语句序列n:break; default:语句序列n+1;

}136)循环语句:

for语句 for(赋初值表达式序列;条件;修改表达式序列)语句;

while语句while(条件)语句;

do-while语句do{

语句序列;

}while(条件);7)结束语句: 函数结束语句 return表达式;

return;

case结束语句 break; 异常结束语句 exit(异常代码);8)输入和输出语句: 输入语句 scanf([格式串],变量1,…,变量n); 输出语句 printf([格式串],表达式1,…,表达式n);9)注释 单行注释//文字序列1410)基本函数:

求最大值 max(表达式1,…,表达式n) 求最小值 min(表达式1,…,表达式n) 求绝对值 abs(表达式) 求不足整数值 floor(表达式) 求进位整数值 ceil(表达式) 判定文件结束 eof(文件变量)或eof

判定行结束 eoln(文件变量)或eoln11)逻辑运算约定 与运算&&:对于A&&B,当A的值为0时,不再对B求值。 或运算||:对于A||B,当A的值为非0时,不再对B求值。15£1.5算法和算法分析

£1.5.1算法的描述

算法(algorithm):是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。

一个算法还具有以下5个重要特性:

1)有穷性 一个算法必须总是(对任何合法的输入值)在执行有穷步之后 结束,且每一步都可在有穷时间内完成。

2)确定性 算法中每一条指令必须有确切的含义,读者理解时不会产生二 义性。并且,在任何条件下,算法只有唯一的一条执行路径, 即对于相同的输入只能得出相同的输出。3)可行性 一个算法是可行的,即算法中描述的操作都是可以通过已经实 现的基本运算执行有限次来实现的。

4)输入 一个算法有零个或多个的输入,这些输入取自于某个特定的对 象的集合。5)输出 一个算法有一个或多个的输出,这些输出是同输入有着某些特 定关系的量。

16£1.5.2算法设计的要求1)正确性(correctness)

大体可分为4个层次:①程序不含语法错误;②程序对于几组输入数据能够得出满足规格说明要求的结果;③程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出 满足规格说明要求的结果。④程序对于一切合法的输入数据都能产生满足规格说明要求的结果。2)可读性(readability)算法重要是为了人的阅读与交流,其次才是机器执行。可读性好有助于人对算法的理解;晦涩难懂的程序易于隐藏较多错误,难以调试和修改。3)健壮性(robustness)当输入数据非法时,算法也能适当的做出反应或进行处理,而不会产生莫名其妙的输出结果。4)效率与低存储量需求效率:指算法执行的时间。存储量需求:指算法执行过程中所需要的最大存储空间。高效率与低存储量需求这两者都与问题的规模有关。17£1.5.3算法效率的度量频度和时间复杂度是衡量一个算法时间性能的指标。频度(frequencycount):一个语句在算法中重复执行的次数。一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作:

T(n)=O(f(n))它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称做算法的渐进时间复杂度(asympt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论