配套课件-数据结构1.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《配套课件-数据结构1.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 配套 课件 数据结构
- 资源描述:
-
1、第第1章绪章绪 论论1.1 数据结构的概念数据结构的概念1.2 数据的逻辑结构和存储结构数据的逻辑结构和存储结构1.3 算法算法本章小结本章小结习题一习题一实训实训1-1 算法性能分析算法性能分析【教学目标】通过对本章的学习,熟悉各名词和术语的含义,理解数据结构及其有关的概念,了解算法的基本特征和算法的评价标准,掌握估算算法的时间复杂度的方法。运用计算机对一批数据进行处理时,必须解决好三个方面的问题:第一,根据数据之间的逻辑关系如何组织这批数据?第二,如何将这批数据存储在计算机的存储器中?第三,对于存储在计算机中的这批数据可以进行哪些操作?如何实现这些操作?对同一问题的不同操作方法如何进行评价
2、?这些问题就是数据结构这门课程所要研究的主要问题。1.1 数据结构的概念数据结构的概念1.1.1 基本概念和术语基本概念和术语在阐述数据结构的概念之前,先对数据结构中常用的几个基本概念和术语给出确切的定义。1.数据数据(Data)数据是描述客观事物的数值、字符以及能输入机器且能被处理的各种符号的集合。换句话说,数据是对客观事物采用计算机能够识别、存储和处理的形式所进行的描述。简而言之,数据就是计算机化的信息。数据一般可分为数值型数据和非数值型数据,如数学中的整数、实数等都是数值型数据,字符、表格、图形、图像和声音等都是非数值型数据。又如对于C源程序,数据概念不仅是源程序所处理的数据,源程序本身
3、也是被C编译程序处理的数据。编译程序相对于源程序是一个处理程序,它加工的数据是字符流的源程序(.c),输出的结果是目标程序(.obj);对于链接程序来说,它加工的数据是目标程序(.obj),输出的结果是可执行程序(.exe),如图 1.1 所示。图1.1 编译程序示意图2.数据元素数据元素(Data Element)数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。有时一个数据元素可以由若干个数据项组成,数据项是具有独立含义的最小单位。数据元素有时也叫做结点、元素、顶点、记录等。例如:在数据库管理系统中,数据库中的一条记录就是一个数据元素,这条记录中的每一个字段就是构成这
4、个数据元素的数据项,如表1-1所示。表表1-1 学学 籍籍 表表学 号出 生 年 月姓 名性 别籍 贯住 址1011983.11赵 红 玲女河 北北 京记 录数 据 项3.数据对象数据对象(Data Object)数据对象是性质相同的数据元素的集合,是数据的一个子集。例如:整数数据对象是集合=0,1,2,字母字符数据对象是集合C=A,B,Z。表1-1所示的学籍表也可看做一个数据对象。由此可看出,不论数据元素集合是无限集(如整数集)、有限集(如字符集),还是由多个数据项组成的复合数据元素(如学籍表),只要性质相同,都是同一个数据对象。4.数据类型数据类型数据类型是一组性质相同的值集合以及定义在这
5、个值集合上的一组操作的总称。数据类型中定义了两个集合,即该类型的取值范围,以及该类型中可允许使用的一组运算。例如高级语言中的数据类型就是已经实现的数据结构的实例。从这个意义上讲,数据类型是高级语言中允许的变量种类,是程序语言中已经实现的数据结构(即程序中允许出现的数据形式)。在高级语言中,整型类型可能的取值范围是-32 768+32 767,可用的运算符集合为加、减、乘、除、乘方、取模(如C语言中的+、-、*、/、%)。1.1.2 数据结构的定义数据结构的定义对于什么是数据结构,目前还没有一个公认的定义,对数据结构的概念,可以从以下两个角度来理解:一是把数据结构作为一门独立开设的课程,看“数据
6、结构”在计算机专业中的地位、性质、任务以及它研究的内容等;二是把数据结构作为计算机所处理的数据的组织方式来理解。1.“数据结构数据结构”课程课程“数据结构”作为一门独立的课程在国外是从1968年开始设立的,我国从1978年开始,各高等院校才先后开设了这门课程,现在“数据结构”已是计算机专业的一门综合性的专业基础课。它是“操作系统”、“编译原理”、“数据库系统”、“计算机图形学”、“人工智能”等课程的先修课。“数据结构”的研究不仅涉及到计算机硬件的研究范围,而且和计算机软件的研究有着密切的关系,可以说,“数据结构”是介于数学、计算机硬件和计算机软件三者之间的一门综合性课程,可以用一个定义描述如下
7、:“数据结构”是研究非数值计算的程序设计问题中计算机操作对象以及它们的关系和操作的一门学科。2.数据结构的概念数据结构的概念如果从数据元素之间的组织形式来看,可以认为数据结构指的是计算机所处理的数据元素之间的组织形式和相互关系。在任何问题中,数据元素都不是孤立存在的,它们之间必定存在着某种内在的或者是根据需要人为定义的关系,这种关系就是这些数据元素的数据结构。数据结构一般包括以下三个方面的内容:(1)数据元素之间的逻辑关系,即数据的逻辑结构,是用户根据需要而建立起来的。(2)数据元素及其关系在计算机存储器内的表示,即数据的存储结构,又称数据的物理结构。(3)数据的运算,即对数据元素所进行的操作
8、。可以把数据结构定义为:对计算机处理的一批数据,首先按某种逻辑关系把它们组织起来,再按一定的存储表示方式把它们存储在计算机的存储器中,然后给这批数据规定一组操作。1.2 数据的逻辑结构和存储结构数据的逻辑结构和存储结构1.2.1 逻辑结构逻辑结构根据数据元素之间的不同特性,可以把数据的逻辑结构分为四种基本类型:集合、线性结构、树形结构和图形结构。其逻辑结构关系如图1.2所示。1.集合集合集合中的数据元素之间除了“同属于一个集合”的关系外,没有其它任何关系。大街上熙熙攘攘的人群可以看成是一个集合。集合是数据结构的一种特例,本书不予讨论。2.线性结构线性结构线性结构中的数据元素之间存在一对一的线性
9、关系。即除了第一个元素外,其它的每个元素都有且仅有一个直接前驱,除了最后一个元素外,每个元素都有且仅有一个直接后继。火车站长长的购票队列就是线性结构。3.树形结构树形结构树形结构中的数据元素之间存在一对多的层次关系。即每个结点最多只有一个直接前驱,但每个结点都可以有多个直接后继。其中根结点没有前驱结点,叶子结点没有后继结点。军队中师、团、营、连、排的层次结构就是一种典型的树形结构,三军总司令是根,而士兵就是叶子。4.图形结构图形结构图形结构中的数据元素之间存在多对多的任意关系。即各个结点可以有多个直接前驱,也可以有多个直接后继。城市之间四通八达的公路网就是图形结构。有时也可以把数据逻辑结构简单
10、地分为两种类型,即线性结构和非线性结构。非线性结构包括树形结构和图形结构。图1.2 四种基本逻辑结构关系图1.2.2 存储结构存储结构存储结构(又称物理结构)是逻辑结构在计算机中的存储映像,是逻辑结构在计算机中的实现,它包括数据元素的表示和关系的表示。逻辑结构与存储结构的关系为:存储结构是逻辑关系的映像与元素本身的映像。逻辑结构是数据结构的抽象,存储结构是数据结构的实现,两者综合起来建立了数据元素之间的结构关系。存储结构可以分为顺序存储结构和非顺序存储结构两大类。顺序存储的特点是将数据元素按其逻辑顺序依次存储在内存中一组地址连续的存储单元中,即逻辑上相邻的结点物理上也必须相邻。非顺序存储则比较
11、灵活,可以将数据分散存储在内存中,即逻辑上相邻的结点物理上不一定相邻。常用的非顺序存储有链式存储、Hash存储和索引存储。1.3 算算 法法1.3.1 算法的概念及描述算法的概念及描述1.算法算法(Algorithm)简单地说,算法就是解决特定问题的方法。严格地说,算法是由若干条指令组成的有穷序列,其中每条指令表示计算机的一个或多个操作。例如:将一组给定的数据由小到大进行排序,解决的方法有若干种,而每一种排序方法就是一种算法。一个算法必须具有以下五个特性:(1)有穷性。一个算法在执行有限条指令后必须要终止,且每条指令都要在有限时间内完成。不能形成无穷循环。(2)确定性。算法中每条指令必须有确切
12、的含义,不会产生二义性(3)可行性。算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。(4)输入。一个算法有零个或多个的输入,这些输入取决于某个特定的对象的集合。(5)输出。一个算法有一个或多个结果输出。算法和程序有所不同,程序可以不满足上述的有穷性。例如,Windows操作系统在用户未操作之前一直处于“等待”的循环中,直到出现新的用户操作为止。2.算法、语言和程序的关系算法、语言和程序的关系(1)算法。算法描述了数据对象的元素之间的关系(包括数据逻辑关系和存储关系)。(2)语言。算法可用自然语言、框图或高级程序设计语言进行描述。自然语言简单但易于产生二义性,框图直观但不擅长表
13、达数据的组织结构,而高级程序语言则较为准确且比较严谨。(3)程序。程序是算法在计算机中的实现(与所用计算机及所用语言有关)。1.3.2 算法的评价标准算法的评价标准对于一个特定的问题,采用不同的存储结构,其算法描述一般是不相同的,即使在同一种存储结构下,也可以采用不同的求解策略,从而有许多不同的算法。那么,对于解决同一问题的不同算法,选择哪一种算法较为合适,以及如何对现有的算法进行改进,从而设计出更好的算法,这就是算法评价问题。评价一个算法的优劣主要有以下几个标准:1.正确性正确性一个算法能否正确地执行预先的功能,这是评价一个算法的最重要也是最基本的标准。其要求是:(1)所设计的程序没有语法错
14、误。(2)所设计的程序对于几组输入数据能够得出满足要求的结果。(3)所设计的程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得到满足要求的结果。(4)程序对于一切合法的输入数据都能产生满足要求的结果。例如,求5个数的最大值问题,给出示意算法如下:max=0;for(i=1;imax)max=x;printf(%f,max);表面上看来该算法是正确的,输入10.1、2.5、-3.4、-6.5、8.4验证,结果也正确,可是当输入数据全部是负数的时候,输出结果却是0,所以该算法并不正确。2.可读性可读性算法主要是为了人的阅读与交流,其次才是机器执行。即使算法已转变成机器可执行的程序,也需考
15、虑人能较好地阅读理解。可读性好有助于人对算法的理解,这既有助于对算法中隐藏错误的排除,也有助于算法的交流和移植。3.健壮性健壮性算法应具有很强的容错能力,即算法能对非法数据的输入进行检查和处理,不会因非法数据的输入而导致异常中断或死机等现象。4.运行时间运行时间运行时间是指算法在计算机上运行所花费的时间,它等于算法中每条语句执行时间的总和。对于同一个问题如果有多个算法可供选择,应尽可能选择执行时间短的算法,一般来说,执行时间越短则算法的效率越高、性能越好。5.占用空间占用空间占用空间是指算法在计算机存储器上所占用的存储空间,包括存储算法本身所占用的存储空间,算法的输入、输出数据所占用的存储空间
16、和算法运行过程中临时占用的存储空间。算法占用的存储空间是指算法执行过程中所需要的最大存储空间。对于一个问题如果有多个算法可供选择,应尽可能选择存储量需求低的算法。实际上,算法的时间效率和空间效率经常是一对矛盾体,相互抵触,有时增加辅助的存储空间可以加快算法的运行速度,即用空间换取时间;有时因为内存空间不够,必须压缩辅助的存储空间,从而降低了算法的运行速度,即用时间换取空间。通常把算法在运行过程中临时占用的存储空间的大小叫做算法的空间复杂度。算法的空间复杂度比较容易计算,它主要包括局部变量所占用的存储空间和系统为实现递归所使用的堆栈占用的存储空间。1.3.3 算法的时间复杂度算法的时间复杂度一个
17、算法的运行时间是该算法中每条语句执行时间的总和,而每条语句的执行时间是该语句的执行次数(也叫语句频度)与执行一次该语句所需时间的乘积。由于同一条语句在不同的机器上执行所需的时间是不相同的,也就是说执行一条语句所需的时间与具体的机器有关,因此要想精确地计算各种语句执行一次所需的时间是比较困难的。实际上,为了评价一个算法的性能,我们只需计算算法中所有语句执行的总次数即可。任何一个算法最终都要被分解成一系列基本操作(如赋值、转向、比较、输入、输出等)来具体执行,每一条语句也要分解成具体的基本操作来执行,所以算法的运行时间也可以用算法中所进行的基本操作的总次数来估算。在一个算法中,进行简单操作的次数越
18、少,其运行时间也相对越少。为了便于比较同一问题的不同算法,也可以用算法中的基本操作重复执行的频度作为算法运行时间的度量标准。通常把算法中的基本操作重复执行的频度称为算法的时间复杂度。算法中的基本操作一般是指算法中最深层循环内的语句,因此,算法中基本操作重复执行的频度T(n)是问题规模n的某个函数f(n),记作:T(n)=O(f(n)。其中“O”表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,或者说,用“O”表示数量级(Order of Magnitude)的概念。例如,若T(n)=2n2+3n+1,则2n2+3n+1的数量级与n2的数量级相同,所以T(n)=O(n2)。如果
19、一个算法没有循环语句,则算法的基本操作的执行频度与问题规模n无关,记作O(1),也称常数阶。如果一个算法只有一重循环,则算法的基本操作的执行频度随问题规模n的增大而呈线性增大关系,记作O(n),也称做线性阶。按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2),平方阶O(n2),立方阶O(n3),k次方阶O(nk),指数阶O(2n)。随着问题规模n的不断增大,上述时间复杂度也不断增大,算法执行效率依次降低。下面举例说明计算算法时间复杂度的方法。例例1.1 分析以下程序段的时间复杂度。for(i=1;in;i+)y=y+1;fo
20、r(j=0;j=(2*n);j+)x+;解:该程序段中语句的频度是n-1,语句的频度是(n-1)(2n+1)=2n2-n-1,则程序段的时间复杂度T(n)=(n-1)+(2n2-n-1)=2n2-2=O(n2)。例例1.2 分析以下程序段的时间复杂度。i=1;while(i=n)i=i*2;解解:该程序段中语句的频度是1,设语句的频度为f(n),则有2f(n)n,即f(n)log2n,取最大值f(n)=log2n,所以该程序段的时间复杂度T(n)=1+f(n)=1+log2n=O(log2n)。例例1.3 分析以下程序段的时间复杂度。a=0,b=1;for(i=2;i=n;i+)s=a+b;b
21、=1;a=s;解解:该程序段中语句的频度是2,语句、的频度都是n-1,则该程序段的时间复杂度T(n)=2+3*(n-1)=3n-1=O(n)。例例1.4 分析下列算法的时间复杂度。prime(int n)int i=2;while(n%i)!=0&i*1.0sqrt(n)printf(%d是一个素数n,n);else printf(%d不是一个素数n,n);解解:从上面的四个例题可以看出,算法的时间复杂度是由嵌套最深层语句的频度决定的。prime函数嵌套最深层语句是,显然它的频度由条件(n%i)!=0&i*1.0sqrt(n)中的i*1.0sqrt(n)决定,即执行频度小于sqrt(n),所以
22、其时间复杂度是T(n)=()。n例例1.5 下面是求两个nn阶矩阵乘法C=AB的算法,分析该算法的时间复杂度。#define MAX 100void maxtrixmult(int n,float aMAXMAX,bMAXMAX,float cMAXMAX)int i,j,k;float x;for(i=1;i=n;i+)for(j=1;j=n;j+)x=0;for(k=1;k=n;k+)x+=aik*bkj;cij=x;解解:该算法中嵌套最深层语句是,其频度是n3,则该算法的时间复杂度T(n)=O(n3)。本本 章章 小小 结结本章主要介绍了数据结构及其有关的概念,包括数据、数据元素、数据对
23、象、数据类型、数据结构、逻辑结构、存储结构和算法等基本概念。数据结构一般包括三个方面的内容:数据的逻辑结构、数据的存储结构以及对数据元素所进行的操作。根据不同的抽象层次,数据结构可分为逻辑结构和存储结构。数据的逻辑结构是指数据结构中数据元素之间的逻辑关系,是用户根据需要而建立起来的。根据数据元素之间的不同特性,我们可以把数据逻辑结构分为集合、线性结构、树形结构和图形结构四种基本类型。集合中的数据元素之间除了“同属于一个集合”的关系外,没有其它任何关系,它是数据结构的一种特例;线性结构中的数据元素之间存在一对一的线性关系;树形结构中的数据元素之间存在一对多的层次关系;图形结构中的数据元素之间存在
24、多对多的任意关系。有时我们也可以把数据逻辑结构分为两种类型:线性结构和非线性结构。非线性结构包括树形结构和图形结构。数据的存储结构是指数据元素在计算机的存储器中的存储方式。一般来说,存储结构有顺序存储和非顺序存储两种基本类型,其中非顺序存储中常用的有链式存储、Hash存储和索引存储。算法是解决特定问题的方法,是由若干条指令组成的有穷序列。一个算法应具有五个基本特征:有穷性、确定性、可行性、输入和输出。评价一个算法的标准主要有五个方面:正确性、可读性、健壮性、运行时间和占用的存储空间。习习 题题 一一一、单选题一、单选题1.下列四种基本逻辑结构中,数据元素之间关系最弱的是 ,队列属于 。A.集合
25、 B.线性结构 C.树形结构D.图形结构2.线性结构各数据元素之间存在着 的关系,图形结构数据元素之间存在 的关系。A.无关 B.一对一 C.一对多 D.多对多3.在数据结构中,从逻辑上可以把数据结构分成 。A.动态结构和静态结构 B.紧凑结构和非紧凑结构C.线性结构和非线性结构 D.内部结构和外部结构4.算法中的基本操作重复执行的频度称为算法的 ;除了考虑存储数据结构本身所占用的空间外,实现算法所用辅助空间的多少称为算法的 。A.时间复杂度B.空间复杂度 C.硬件复杂度D.软件复杂度5.算法分析的目的是 ,算法分析的两个主要方面是 。A.找出数据结构的合理性 B.研究算法中的输入和输出的关系
展开阅读全文