数据结构实用教程(c语言版)课件.ppt

上传人(卖家):ziliao2023 文档编号:5613743 上传时间:2023-04-27 格式:PPT 页数:608 大小:6.56MB
下载 相关 举报
数据结构实用教程(c语言版)课件.ppt_第1页
第1页 / 共608页
数据结构实用教程(c语言版)课件.ppt_第2页
第2页 / 共608页
数据结构实用教程(c语言版)课件.ppt_第3页
第3页 / 共608页
数据结构实用教程(c语言版)课件.ppt_第4页
第4页 / 共608页
数据结构实用教程(c语言版)课件.ppt_第5页
第5页 / 共608页
点击查看更多>>
资源描述

1、数据结构实用教程(C语言版).1253.1.1 什么是数据结构什么是数据结构v1.1.1 基本概念及术语基本概念及术语v1.1.2 数据的逻辑结构数据的逻辑结构v1.1.3 数据的存储结构数据的存储结构v1.1.4 抽象数据类型抽象数据类型.1.1.1 基本概念及术语基本概念及术语在系统的学习数据结构知识之前,先了解一些相在系统的学习数据结构知识之前,先了解一些相关概念和术语。关概念和术语。1数据(数据(Data)指所有能输入到计算机中并被计算机程序处理的指所有能输入到计算机中并被计算机程序处理的符号的总称。例如,整数、实数、字符、图像、符号的总称。例如,整数、实数、字符、图像、声音等都是数据

2、。声音等都是数据。2数据元素(数据元素(Data Element)数据元素(也称为结点)是数据的基本单位,在数据元素(也称为结点)是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处计算机程序中通常作为一个整体进行考虑和处理。一个数据元素可以由若干个数据项组成。理。一个数据元素可以由若干个数据项组成。数据项是数据处理中不可分割的最小单位。数据项是数据处理中不可分割的最小单位。.3数据结构(数据结构(Data Structure)是相互之间存在一种或多种特定关系的数据元是相互之间存在一种或多种特定关系的数据元素的集合。这些数据元素不是孤立存在的,素的集合。这些数据元素不是孤立存在的,而是

3、有着某种关系,这种关系称为结构。而是有着某种关系,这种关系称为结构。数据结构一般包括以下三个方面内容:数据结构一般包括以下三个方面内容:(1)数据元素之间的逻辑关系,也称数据的)数据元素之间的逻辑关系,也称数据的逻辑结构。逻辑结构。(2)数据元素及其关系在计算机存储器内的)数据元素及其关系在计算机存储器内的表示,称为数据的存储结构。表示,称为数据的存储结构。(3)数据的运算,即对数据施加的操作。)数据的运算,即对数据施加的操作。1.1.1 基本概念及术语基本概念及术语.数据结构定义:按某种逻辑关系组织起来的一批数据,数据结构定义:按某种逻辑关系组织起来的一批数据,按一定的映像方式把它存放在计算

4、机存储器中,并按一定的映像方式把它存放在计算机存储器中,并在这些数据上定义了一个运算的集合,就叫做数据在这些数据上定义了一个运算的集合,就叫做数据结构。结构。简言之,数据结构简言之,数据结构=逻辑结构逻辑结构+存储结构存储结构+运算集运算集合合。4数据类型数据类型(Data Type)数据类型是一组性质相同的值集合以及定义在这个值数据类型是一组性质相同的值集合以及定义在这个值集合上的一组操作的总称。集合上的一组操作的总称。如在高级语言中,整型类型的取值范围为:如在高级语言中,整型类型的取值范围为:-32768+32767,运算符集合为加、减、乘、,运算符集合为加、减、乘、除、取模,即除、取模,

5、即+、-、*、/、%。1.1.1 基本概念及术语基本概念及术语.5数据类型(Data Type)高级语言中的数据类型分为两大类:(1)原子类型其值是不可分解的。如C语言中的标准类型(整型、实型、字符型)。(2)结构类型其值是由若干成分按某种结构组成的,因此是可以分解的。如C语言中的的构造类型(结构体、共用体、枚举等类型)。1.1.1 基本概念及术语基本概念及术语.1.1.2 数据的逻辑结构数据的逻辑结构1定义定义数据的逻辑结构是指数据元素之间逻辑关系描数据的逻辑结构是指数据元素之间逻辑关系描述。可以用一个二元组表示,其形式化描述述。可以用一个二元组表示,其形式化描述为:为:Data_Struc

6、ture=(D,R)其中其中D是数据元素的有限集合,是数据元素的有限集合,R是是D上关系上关系的有限集合。数据的逻辑结构是从逻辑关系的有限集合。数据的逻辑结构是从逻辑关系上描述数据,与数据的存储无关,是独立于上描述数据,与数据的存储无关,是独立于计算机的。计算机的。.2数据的逻辑结构的分类数据的逻辑结构的分类根据数据元素之间的逻辑关系的不同特性,分根据数据元素之间的逻辑关系的不同特性,分为下列四类基本结构,如图为下列四类基本结构,如图1-1所示。所示。(a)集合结构)集合结构 (b)线性结构)线性结构 (c)树型结构)树型结构 (d)图形结构)图形结构图图1-1 数据结构的四种基本逻辑结构数据

7、结构的四种基本逻辑结构1.1.2 数据的逻辑结构数据的逻辑结构.(1)集合)集合结构中的数据元素之间除了结构中的数据元素之间除了“同属于一个集合同属于一个集合”的关系外,别无其他关系,这是一种最简单的关系外,别无其他关系,这是一种最简单的数据结构。的数据结构。(2)线性结构)线性结构结构中的数据元素之间存在着结构中的数据元素之间存在着“一对一一对一”的关的关系。系。【例例1.1】学籍档案管理学籍档案管理假设一个学籍档案管理系统应包含如表假设一个学籍档案管理系统应包含如表1-1所所示的学生信息。示的学生信息。1.1.2 数据的逻辑结构数据的逻辑结构.特点:特点:表中的每一行是一个数据元素(或记录

8、、结点),它表中的每一行是一个数据元素(或记录、结点),它由学号、姓名、性别及出生年月等数据项组成。由学号、姓名、性别及出生年月等数据项组成。表中数据元素之间是一种先后关系,对于表中任一结表中数据元素之间是一种先后关系,对于表中任一结点,与它相邻且在它前面的结点(称为直接前驱)点,与它相邻且在它前面的结点(称为直接前驱)最多只有一个;与表中任一结点相邻且在其后的结最多只有一个;与表中任一结点相邻且在其后的结点(称为直接后继)也最多只有一个。我们将这种点(称为直接后继)也最多只有一个。我们将这种关系称为关系称为“线性结构线性结构”。1.1.2 数据的逻辑结构数据的逻辑结构.(3)树型结构)树型结

9、构结构中的数据元素之间存在着结构中的数据元素之间存在着“一对多一对多”的关的关系。系。【例例1.2】人机对弈人机对弈人与计算机进行对弈的部分图如图人与计算机进行对弈的部分图如图1-2为所示。为所示。图图1-2 人机对弈图人机对弈图1.1.2 数据的逻辑结构数据的逻辑结构.特点:特点:图中将每一个棋盘看作一个数据元素,则数据图中将每一个棋盘看作一个数据元素,则数据元素之间的关系要比表元素之间的关系要比表1-1要复杂许多。要复杂许多。图中数据元素之间是一对多关系,即一个数据图中数据元素之间是一对多关系,即一个数据元素向上和一个数据元素相连(称为双亲结元素向上和一个数据元素相连(称为双亲结点),向下

10、和多个数据元素相连(称为孩子点),向下和多个数据元素相连(称为孩子结点)。我们将这种关系称为结点)。我们将这种关系称为“树型结构树型结构”。4)图形结构或网状结构)图形结构或网状结构结构中的任意数据元素之间都可以有关系,元结构中的任意数据元素之间都可以有关系,元素之间存在着素之间存在着“多对多多对多”的关系。的关系。1.1.2 数据的逻辑结构数据的逻辑结构.(【例1.3】制定教学计划在制定教学计划时,需要考虑各门课程的开设顺序。有些课程需要先导先修课程,有些课程则不需要,而有些课程又是其他课程的先导先修课程。比如,计算机专业课程的开设情况如表1-2所示。1.1.2 数据的逻辑结构数据的逻辑结构

11、.教学计划的关系图如图教学计划的关系图如图1-3所示。所示。图图1-3 教学计划关系图教学计划关系图特点:特点:图中数据元素存在着多对多的任意关系。一个图中数据元素存在着多对多的任意关系。一个结点可能有多个直接前驱和直接后继。结点可能有多个直接前驱和直接后继。1.1.2 数据的逻辑结构数据的逻辑结构.1.1.3 数据的存储结构数据的存储结构数据在计算机中的存储表示称为数据的存储结数据在计算机中的存储表示称为数据的存储结构,也称为物理结构。数据的存储结构是逻构,也称为物理结构。数据的存储结构是逻辑结构在计算机存储器中的实现。本书将介辑结构在计算机存储器中的实现。本书将介绍常用的两种基本的存储结构

12、:顺序存储结绍常用的两种基本的存储结构:顺序存储结构和链式存储结构。构和链式存储结构。数据的逻辑结构和存储结构的关系是:存储结数据的逻辑结构和存储结构的关系是:存储结构是逻辑关系的映像与元素本身映像,是数构是逻辑关系的映像与元素本身映像,是数据结构的实现;逻辑结构是数据结构的抽象。据结构的实现;逻辑结构是数据结构的抽象。.1.顺序存储结构顺序存储结构顺序存储结构:借助元素在存储器中的相对位顺序存储结构:借助元素在存储器中的相对位置来表示数据元素间的逻辑关系。置来表示数据元素间的逻辑关系。【例例1.4】对于表对于表1-1提出的学生信息登记表提出的学生信息登记表进行存储,假定每个元素占用进行存储,

13、假定每个元素占用50个存储单元,个存储单元,数据从数据从1000号单元开始由低地址向高地址号单元开始由低地址向高地址存放,对应的顺序存储结构如表存放,对应的顺序存储结构如表1-3所示。所示。1.1.3 数据的存储结构数据的存储结构.顺序存储结构的主要特点:顺序存储结构的主要特点:v可实现对各数据元素的随机访问。这是因为可实现对各数据元素的随机访问。这是因为只要知道存储的首地址以及每个数据元素所只要知道存储的首地址以及每个数据元素所占的存储单元,就可以计算出各数据元素的占的存储单元,就可以计算出各数据元素的存储地址。存储地址。v不利于修改,在对数据元素进行插入、删除不利于修改,在对数据元素进行插

14、入、删除运算时可能要移动一系列的数据元素。运算时可能要移动一系列的数据元素。1.1.3 数据的存储结构数据的存储结构.2.链式存储结构链式存储结构链式存储结构:借助指示元素存储地址的指针链式存储结构:借助指示元素存储地址的指针表示数据元素间的逻辑关系。表示数据元素间的逻辑关系。【例例1.5】对于表对于表1-1学生信息登记表进行链学生信息登记表进行链式存储时,在每个数据元素后方附加一个指式存储时,在每个数据元素后方附加一个指向向“下一个结点地址下一个结点地址”的指针字段,用于存的指针字段,用于存放后继数据元素的存储地址,每个数据元素放后继数据元素的存储地址,每个数据元素的地址是随机的,可以不连续

15、。对应的链式的地址是随机的,可以不连续。对应的链式存储结构见表存储结构见表1-4所示。所示。1.1.3 数据的存储结构数据的存储结构.链式存储结构的主要特点:链式存储结构的主要特点:v利于修改,在对数据元素进行插入、删除运利于修改,在对数据元素进行插入、删除运算时,仅需修改数据元素的指针字段值,而算时,仅需修改数据元素的指针字段值,而不必移动数据元素。不必移动数据元素。v由于逻辑上相邻的数据元素在存储位置中不由于逻辑上相邻的数据元素在存储位置中不一定相邻,因此,链式存储结构不能对数据一定相邻,因此,链式存储结构不能对数据元素进行随机访问。元素进行随机访问。1.1.3 数据的存储结构数据的存储结

16、构.1.1.4 抽象数据类型抽象数据类型1抽象数据类型的定义抽象数据类型的定义抽象数据类型(抽象数据类型(Abstract Data Type,简,简称称ADT)是指一个数学模型以及定义在该模)是指一个数学模型以及定义在该模型上的一组操作。型上的一组操作。2抽象数据类型的表示抽象数据类型的表示抽象数据类型实际上就是对该数据结构的定义。抽象数据类型实际上就是对该数据结构的定义。因为它定义了一个数据的逻辑结构以及在此因为它定义了一个数据的逻辑结构以及在此结构上的一组算法。可以用一个三元组表示:结构上的一组算法。可以用一个三元组表示:ADT=(,)(,)其中,其中,D是数据对象,是数据对象,S是是D

17、上的关系集,上的关系集,P是是对对D的基本操作集。的基本操作集。.抽象数据类型通常是指由用户定义,用以表示应用问抽象数据类型通常是指由用户定义,用以表示应用问题的数据类型,抽象数据类型由基本的数据类型组题的数据类型,抽象数据类型由基本的数据类型组成,并包括一组相关的服务(或称操作)。成,并包括一组相关的服务(或称操作)。抽象数据类型有些类似于抽象数据类型有些类似于pascal语言中的记录语言中的记录(record)类型和)类型和c语言中的构造(语言中的构造(struct)类型,)类型,但它增加了相关的服务。但它增加了相关的服务。3ADT的两个重要特征的两个重要特征(1)数据抽象用)数据抽象用A

18、DT描述程序处理的实体时,强调描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)。部用户的接口(即外界使用它的方法)。(2)数据封装将实体的外部特性和其内部实现细节分)数据封装将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节。离,并且对外部用户隐藏其内部实现细节。1.1.4 抽象数据类型抽象数据类型.1.2 算法和算法分析算法和算法分析v1.2.1 算法的概念算法的概念v1.2.2 算法分析算法分析v1.2.3 相关相关C语言知识回顾语言知识回顾.1.2.1 算法的概念算法的

19、概念1算法的定义算法的定义瑞士著名的计算机科学家瑞士著名的计算机科学家N.Wirth所提出的著所提出的著名公式名公式“程序程序=算法算法+数据结构数据结构”,所谓算,所谓算法,就是为解决特定问题而采取的步骤和方法,就是为解决特定问题而采取的步骤和方法。法。2算法的特性算法的特性一个算法应该具有下列特性:一个算法应该具有下列特性:(1)有穷性:一个算法必须(对任何合法的)有穷性:一个算法必须(对任何合法的输入值)在执行有限步之后结束。输入值)在执行有限步之后结束。(2)确定性:算法中的每一条指令必须有确)确定性:算法中的每一条指令必须有确切的含义,不会产生二义性。切的含义,不会产生二义性。.(3

20、)可行性:算法中描述的操作都可以通过)可行性:算法中描述的操作都可以通过执行有限次基本操作来实现。执行有限次基本操作来实现。(4)输入:一个算法有零个或多个输入。)输入:一个算法有零个或多个输入。(5)输出:一个算法必有一个或多个输出。)输出:一个算法必有一个或多个输出。3算法的评价算法的评价要设计一个好的算法通常需要考虑以下几方面要设计一个好的算法通常需要考虑以下几方面的要求:的要求:(1)正确性:要求算法能够正确地执行预先)正确性:要求算法能够正确地执行预先规定的功能,并达到所期望的性能要求。规定的功能,并达到所期望的性能要求。(2)可读性:为了便于理解、测试和修改算)可读性:为了便于理解

21、、测试和修改算法,算法应该具有良好的可读性。法,算法应该具有良好的可读性。1.2.1 算法的概念算法的概念.(3)健壮性:当输入非法的数据时,算法应)健壮性:当输入非法的数据时,算法应能恰当地做出反应或进行相应处理,而不是能恰当地做出反应或进行相应处理,而不是产生莫名奇妙的输出结果。并且处理出错的产生莫名奇妙的输出结果。并且处理出错的方法不应是中断程序的执行,而是返回一个方法不应是中断程序的执行,而是返回一个表示错误或错误性质的值,以便在更高的抽表示错误或错误性质的值,以便在更高的抽象层次上进行处理。象层次上进行处理。(4)高效性:对同一个问题,执行时间越短,)高效性:对同一个问题,执行时间越

22、短,算法的效率越高。算法的效率越高。(5)低存储量:完成相同的功能,执行算法)低存储量:完成相同的功能,执行算法所占用的存储空间应尽可能的少。所占用的存储空间应尽可能的少。1.2.1 算法的概念算法的概念.4算法的描述算法的描述为了表示一个算法,可以用多种不同的方法,为了表示一个算法,可以用多种不同的方法,常用的有自然语言、传统流程图、结构化流常用的有自然语言、传统流程图、结构化流程图、程图、N-S流程图等表示。本书采用流程图等表示。本书采用C的描的描述语言实现对各种数据结构及算法的操作描述语言实现对各种数据结构及算法的操作描述,算法是以函数形式描述,描述如下:述,算法是以函数形式描述,描述如

23、下:类型标识符类型标识符 函数名函数名(形式参数表形式参数表)/*算法说明算法说明*/语句序列语句序列 1.2.1 算法的概念算法的概念.1.2.2 算法分析算法分析在算法满足正确性的前提下,如何评价不同算法的优在算法满足正确性的前提下,如何评价不同算法的优劣呢?通常主要考虑算法的时间复杂度和空间复杂劣呢?通常主要考虑算法的时间复杂度和空间复杂度这两方面。一般情况下,鉴于运算空间(内存)度这两方面。一般情况下,鉴于运算空间(内存)较为充足,所以把算法的时间复杂度作为重点分析。较为充足,所以把算法的时间复杂度作为重点分析。1.时间复杂度(时间复杂度(Time Complexity)一个算法所需的

24、运算时间通常与所解决问题的规模大一个算法所需的运算时间通常与所解决问题的规模大小有关。问题规模是一个和输入有关的量,用小有关。问题规模是一个和输入有关的量,用n 表表示问题规模的量,把算法运行所需的时间示问题规模的量,把算法运行所需的时间T表示为表示为n的函数,记为的函数,记为T(n)。不同的。不同的T(n)算法,当算法,当n增长时,增长时,运算时间增长的快慢很不相同。一个算法所需的执运算时间增长的快慢很不相同。一个算法所需的执行时间就是该算法中所有语句执行次数之和。当行时间就是该算法中所有语句执行次数之和。当n逐渐增大时逐渐增大时T(n)的极限情况,一般简称为时间复杂的极限情况,一般简称为时

25、间复杂度。度。.当讨论一个程序的运行时间时,注重的不是当讨论一个程序的运行时间时,注重的不是T(n)的具体值,而是它的增长率。的具体值,而是它的增长率。T(n)的的增长率与算法中数据的输入规模紧密相关,增长率与算法中数据的输入规模紧密相关,而数据输入规模往往用算法中的某个变量的而数据输入规模往往用算法中的某个变量的函数来表示,通常是函数来表示,通常是f(n)。随着数据输入规。随着数据输入规模的增大,模的增大,f(n)的增长率与的增长率与T(n)的增长率的增长率相近,因此相近,因此T(n)同同f(n)在数量级上是一致在数量级上是一致的。记作:的。记作:T(n)=O(f(n)其中,大写字母其中,大

26、写字母O为为Order(数量级数量级)的字头,的字头,f(n)为函数形式,如为函数形式,如T(n)=O(n2)。1.2.2 算法分析算法分析.注意,当T(n)为多项式时,可只取其最高次幂项并省略其系数,其它的次幂项及系数均略去不写。一般地,对于足够大的n,常用的时间复杂性存在以下顺序:O(1)O(log2n)O(n)O(nlog2n)O(n2)O(n3)O(2n)算法时间复杂度的数量级越大,表示该算法的效率越低,反之越高。例如 O(1)为常数数量级,,即算法的时间复杂性与输入规模n无关。1.2.2 算法分析算法分析.【例例1.6】分析以下算法的时间复杂度。分析以下算法的时间复杂度。x=0;y=

27、0;for(k=1;k=n;k+)x+;(1)执行)执行n次次for(i=1;i=n;i+)for(j=1;j=n;j+)y+;(2)执行)执行n2次次 解:解:T(n)=n+n2T(n)=O(n2)上述算法中的基本运算是语句(上述算法中的基本运算是语句(2),其执行频率为),其执行频率为n2。则。则T(n)=n2=O(n2)1.2.2 算法分析算法分析.【例例1.7】分析以下算法的时间复杂度。分析以下算法的时间复杂度。i=1;while(i=n)i=2*i;(1)执行执行f(n)次次解:设语句(解:设语句(1)执行次数是)执行次数是f(n),则,则2f(n)n得到得到T(n)=O(log2n

28、)1.2.2 算法分析算法分析.【例例1.8】求两个矩阵相乘的函数的时间复杂度。求两个矩阵相乘的函数的时间复杂度。void mult(int a,int b,int c)/*以二维数组存储矩阵元素,以二维数组存储矩阵元素,c为为a和和b的乘积的乘积*/for(i=1;i=n;+i)(1)执行执行n次次 for(j=1;j=n;+j)(2)执行执行n2次次 ci,j=0;for(k=1;k成员名成员名 等价于:等价于:(*指针名指针名).成员名成员名 等价于:结构体变量名等价于:结构体变量名.成员名成员名在本书中,在程序内大量使用结构体类型的指在本书中,在程序内大量使用结构体类型的指针,所以大都

29、采用第一种写法。针,所以大都采用第一种写法。1.2.3 相关相关C语言知识回顾语言知识回顾.(4)用)用typedef定义类型定义类型除了可以直接使用除了可以直接使用C提供的标准类型名和自己提供的标准类型名和自己声明的结构体类型外,还可以用声明的结构体类型外,还可以用typedef声声明新的类型名来代替已有的类型名。其基本明新的类型名来代替已有的类型名。其基本定义格式如下:定义格式如下:【格式格式】typedef 原类型名原类型名 新类型名新类型名;其中,其中,typedef为关键字,表示重定义。原类为关键字,表示重定义。原类型名是型名是C语言提供的任语言提供的任意意一种数据类型,可一种数据类

30、型,可以是简单数据类型,也可以是构造数据类型。以是简单数据类型,也可以是构造数据类型。新类型名为原类型名的一个别名。使用新类新类型名为原类型名的一个别名。使用新类型名就像使用原类型名那样定义变量。型名就像使用原类型名那样定义变量。1.2.3 相关相关C语言知识回顾语言知识回顾.2动态存储分配函数动态存储分配函数C语言提供了动态分配函数来实现动态存储分配。最常语言提供了动态分配函数来实现动态存储分配。最常用的动态存储分配函数有以下两个。用的动态存储分配函数有以下两个。(1)分配内存空间函数)分配内存空间函数malloc()【格式格式】(类型名类型名 *)malloc(要分配的内存字节数要分配的内

31、存字节数size)【功能功能】在内存中分配一个长度为在内存中分配一个长度为size的连续存储空的连续存储空间,返回值是新分配存储空间的首地址,若内存不间,返回值是新分配存储空间的首地址,若内存不足,则返回足,则返回NULL。其中,类型名表示把该存储空。其中,类型名表示把该存储空间用于何种数据类型。(类型名间用于何种数据类型。(类型名 *)表示把)表示把malloc函数返回值强制转换为该类型指针。函数返回值强制转换为该类型指针。1.2.3 相关相关C语言知识回顾语言知识回顾.(2)释放内存空间函数)释放内存空间函数free()【格式格式】free(指向要释放单元的指针名指向要释放单元的指针名)【

32、功能功能】释放该指针所指的一块存储空间,该释放该指针所指的一块存储空间,该空间系统可另作它用。注意这个指针所指的空间系统可另作它用。注意这个指针所指的空间必须是由空间必须是由malloc()函数和函数和calloc()函函数分配的才行。数分配的才行。free函数无返回值。例如:函数无返回值。例如:int*pt;pt=(int *)malloc(sizeof(int);free(pt);程序段表示释放程序段表示释放pt指向的存储空间。指向的存储空间。1.2.3 相关相关C语言知识回顾语言知识回顾.3函数的定义与调用函数的定义与调用在本书中,绝大多数的算法都是编写成在本书中,绝大多数的算法都是编写

33、成C语言的函数,语言的函数,这些函数需要通过编写相应的主函数才能被执行。这些函数需要通过编写相应的主函数才能被执行。(1)函数的定义)函数的定义函数的定义如下:函数的定义如下:【格式格式】函数类型函数类型 函数名(形参表)函数名(形参表)内部变量定义内部变量定义 函数主体语句函数主体语句返回语句返回语句 1.2.3 相关相关C语言知识回顾语言知识回顾.(2)函数的调用)函数的调用【格式格式】函数类型函数类型 函数名(实参表)函数名(实参表);【说明说明】1实参表中各参数应与形参表中各参数类型实参表中各参数应与形参表中各参数类型及个数相符。及个数相符。2在调用函数时,表达式应与该函数的类型在调用

34、函数时,表达式应与该函数的类型相符,如果该函数有返回值时,在调用时要相符,如果该函数有返回值时,在调用时要将该函数的返回值赋给相同类型的变量。将该函数的返回值赋给相同类型的变量。1.2.3 相关相关C语言知识回顾语言知识回顾.4 Turbo C 2.0中的汉字显示中的汉字显示在在TurboC 2.0中,如果想输入和显示汉字,中,如果想输入和显示汉字,需要使用需要使用UCDOS汉字系统。但现在的汉字系统。但现在的Windows操作系统不支持操作系统不支持UCDOS汉字系汉字系统的统的16位显示。下面介绍一种能在位显示。下面介绍一种能在Windows XP系统环境下,在系统环境下,在TurboC

35、2.0中使用中使用UCDOS的汉字系统的方法。的汉字系统的方法。1.2.3 相关相关C语言知识回顾语言知识回顾.(1)将)将UCDOS的核心文件进行兼容性设置的核心文件进行兼容性设置(有的机器可省略这步,直接执行(有的机器可省略这步,直接执行(2)。)。点点“开始开始”菜单菜单-“所有程序所有程序”-“附件附件”-“程序兼容性向导程序兼容性向导”-“我想手动定位程我想手动定位程序序”-“浏览浏览”-win98-256色,色,640X480-程序工程序工作正确吗?选作正确吗?选“是,设置此程序为一直使用是,设置此程序为一直使用兼容性设置。兼容性设置。”完成。有的完成。有的UCDOS版本的版本的核

36、心文件是核心文件是knlvga.exe,也要照此进行兼,也要照此进行兼容性设置。容性设置。1.2.3 相关相关C语言知识回顾语言知识回顾.(2)运行)运行UCDOS系统文件的方法。系统文件的方法。进入到命令提示符(进入到命令提示符(MS-DOS状态)(状态)(“开开始始”-“程序程序”-“附件附件”-“命令提示命令提示符符”)切换到)切换到UCDOS目录。(带下划线文目录。(带下划线文字为输入的命令信息,字为输入的命令信息,“”表示回车键。表示回车键。假设假设UCDOS文件夹在文件夹在C盘根目录内,可输盘根目录内,可输入如下命令:)入如下命令:)C:Documents and Settings

37、cd (回到(回到C盘根目录下)盘根目录下)C:cd Ucdos (进入(进入UCDOS的目录)的目录)1.2.3 相关相关C语言知识回顾语言知识回顾.这时不要运行这时不要运行UCDOS.BAT,分别一项一项,分别一项一项命令运行。如:命令运行。如:C:UDOS C:UDOS C:UDOS C:UDOS C:UDOS (五笔输入,如不(五笔输入,如不用五笔可省略此步)用五笔可省略此步)(注:可直接输入命令名,如输入(注:可直接输入命令名,如输入“rd16 ”,省略扩展名,省略扩展名“.com”)1.2.3 相关相关C语言知识回顾语言知识回顾.就可以顺利进入就可以顺利进入ucdos。然后,退出。

38、然后,退出UCDOS目录,再进入目录,再进入tc目录运行目录运行tc.exe文件就可文件就可以在以在TurboC 2.0中顺利的输入和显示汉字中顺利的输入和显示汉字了。如:了。如:C:UDOScd C:cd tc (假定(假定TurboC 2.0的文的文件夹名称为件夹名称为TC)C:TCtc.exe (可直接输入可直接输入tc 即可即可)即可进行即可进行TurboC 2.0输入并运行输入并运行C语言源程语言源程序了。序了。1.2.3 相关相关C语言知识回顾语言知识回顾.(3)常用的)常用的Turbo C2.0快捷键快捷键Alt+F:文件菜单:文件菜单Load 打开文件打开文件 Save 保存保

39、存 Write to 另存为另存为 Quit 退出退出Alt+R:运行菜单:运行菜单Run(或(或Ctrl+F9)运行程序运行程序 User Screen(或或Alt+F5)查看运行结果查看运行结果Alt+E:编辑(显示光标,有时调试有错时可:编辑(显示光标,有时调试有错时可将光标重新显示在编辑区)将光标重新显示在编辑区)F9:编译系统查错:编译系统查错1.2.3 相关相关C语言知识回顾语言知识回顾.(4)更改汉字输入法)更改汉字输入法Alt+F1 区位区位Alt+F2 全拼全拼Alt+F3 双拼双拼Alt+F5 五笔(必须在五笔(必须在UCDOS中输入中输入wb命命令才能用此项)令才能用此项

40、)Alt+F6 英文英文单次按右单次按右shift键键 可显示或隐藏中文输入法可显示或隐藏中文输入法1.2.3 相关相关C语言知识回顾语言知识回顾.1.3本章小结本章小结本章主要介绍了有关数据结构的以下几方面:本章主要介绍了有关数据结构的以下几方面:(1)数据结构主要研究数据的逻辑结构、存)数据结构主要研究数据的逻辑结构、存储结构和运算方法。储结构和运算方法。(2)数据的逻辑结构包括:集合、线性结构、)数据的逻辑结构包括:集合、线性结构、树型结构、图形结构四种基本类型。树型结构、图形结构四种基本类型。(3)数据的存储结构包括:顺序存储结构和)数据的存储结构包括:顺序存储结构和链式存储结构。链式

41、存储结构。(4)算法是对特定问题求解步骤的一种描述,)算法是对特定问题求解步骤的一种描述,是指令的有限序列。算法具有:有穷性、确是指令的有限序列。算法具有:有穷性、确定性、正确性、输入、输出等特性。定性、正确性、输入、输出等特性。(5)算法的时间复杂度与空间复杂度。)算法的时间复杂度与空间复杂度。.数据结构实用教程(C语言版)中国水利水电出版社.12345.2.1 2.1 线性表的基本概念线性表的基本概念v2.1.1 线性表的定义线性表的定义v2.1.2 线性表的基本操作线性表的基本操作.2.1.1 线性表的定义线性表的定义1.线性表的定义线性表的定义线性表是具有相同数据类型的线性表是具有相同

42、数据类型的n(n=0)个)个数据元素的有限序列,通常记为:数据元素的有限序列,通常记为:(a1,a2,ai-1,ai,ai+1,an)其中其中n为表长,当为表长,当n=0时称为空表。时称为空表。在线性表中相邻元素之间存在着顺序关系。如在线性表中相邻元素之间存在着顺序关系。如对于元素对于元素ai 而言,而言,ai-1 称为称为 ai 的直接前驱,的直接前驱,ai+1 称为称为 ai 的直接后继。的直接后继。.2.线性表的特点线性表的特点(1)有且仅有一个开始结点()有且仅有一个开始结点(a1),它没有),它没有直接前驱;直接前驱;(2)有且仅有一个终端结点()有且仅有一个终端结点(an),它没有

43、),它没有直接后继;直接后继;(3)除了开始结点和终端结点以外,其余的)除了开始结点和终端结点以外,其余的结点都有且仅有一个直接前驱和一个直接后结点都有且仅有一个直接前驱和一个直接后继。继。2.1.1 线性表的定义线性表的定义.2.1.2 线性表的基本操作线性表的基本操作数据结构的运算是定义在逻辑结构层次上的,数据结构的运算是定义在逻辑结构层次上的,而运算的具体实现是建立在存储结构上的。而运算的具体实现是建立在存储结构上的。下面定义的线性表的基本操作仅是定义在逻下面定义的线性表的基本操作仅是定义在逻辑结构上的,每一个操作的具体实现只有在辑结构上的,每一个操作的具体实现只有在确定了线性表的存储结

44、构之后才能完成。确定了线性表的存储结构之后才能完成。线性表的基本操作有:线性表的基本操作有:(1)初始化线性表)初始化线性表InitList(L)。其作用是建立一个空表其作用是建立一个空表L(即建立线性表的构(即建立线性表的构架,但不包含任何数据元素)。架,但不包含任何数据元素)。.(2)求线性表的长度GetLength(L)。其作用是返回线性表L的长度(即所含数据元素的个数)。(3)求线性表中第i个元素GetElem(L,i,x)。其作用是在1iGetLength(L)返回成功,并用x存储线性表L的第i个元素的值。(4)按值查找操作Locate(L,x)。在线性表L查找一个与给定值x相等的数

45、据元素,其作用是若存在一个或多个与x相等的数据元素,则返回的元素所在位置的最小值或地址值;否则返回0或NULL值。2.1.2 线性表的基本操作线性表的基本操作.(5)插入操作)插入操作InsElem(L,i,x)。其作用是在线性表。其作用是在线性表L的第的第i个位置上插入一个值为个位置上插入一个值为 x 的新元素,使线性表的新元素,使线性表L由(由(a1,a2,ai-1,ai,ai+1,an)变为()变为(a1,a2,ai-1,x,ai,ai+1,an)。其中)。其中1iGetLength(L)+1。(6)删除操作)删除操作DelElem(L,i,x)。其作用是删除线性表。其作用是删除线性表L

46、的第的第i个位置的数据元素并用个位置的数据元素并用x将其存储,使线性表将其存储,使线性表L由(由(a1,a2,ai-1,ai,ai+1,an)变为()变为(a1,a2,ai-1,ai+1,an)。其中)。其中1iGetLength(L)。(7)输出元素值)输出元素值DispList(L)。其作用是依次扫描线性。其作用是依次扫描线性表表L,并输出各元素的值。,并输出各元素的值。2.1.2 线性表的基本操作线性表的基本操作.2.2 顺序表顺序表v2.2.1 顺序表顺序表v2.2.2 顺序表的基本操作实现顺序表的基本操作实现.1.顺序表的定义顺序表的定义数据结构在内存中的表示通常有两种形式,即顺序存

47、数据结构在内存中的表示通常有两种形式,即顺序存储表示和链式存储表示。线性表的顺序存储表示又储表示和链式存储表示。线性表的顺序存储表示又称为顺序表。线性表的顺序存储是指用一组地址连称为顺序表。线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表的数据元素,我们把续的存储单元依次存储线性表的数据元素,我们把用这种存储形式存储的线性表称为顺序表。用这种存储形式存储的线性表称为顺序表。假设顺序表假设顺序表(a1,a2,ai-1,ai,ai+1,an),每,每个数据元素占用个数据元素占用d个存储单元,则元素个存储单元,则元素ai的存储位置的存储位置为:为:Loc(ai)=Loc(a1)+(i-1)

48、d 1in2.2.1 顺序表顺序表.其中,其中,Loc(a1)是顺序表第一个元素是顺序表第一个元素a1的存储位置,的存储位置,通称为顺序表的起始地址。顺序存储结构示意图如通称为顺序表的起始地址。顺序存储结构示意图如图图2-1所示。所示。顺序表的存储特点:顺序表的存储特点:(1)顺序表的逻辑顺序和物理顺序是一致的。)顺序表的逻辑顺序和物理顺序是一致的。(2)顺序表中任意一个数据元素都可以随机存取,所)顺序表中任意一个数据元素都可以随机存取,所以顺序表是一种随机存取的存储结构。以顺序表是一种随机存取的存储结构。2.2.1 顺序表顺序表.2.顺序表的类型定义顺序表的类型定义#define MAXLE

49、N 100 /*定义常量定义常量MAXLEN为为100表示存表示存储空间总量储空间总量*/#define OK /*定义常量定义常量OK为为1表示成功表示成功*/#define ERROR 0 /*定义常量定义常量ERROR为为0表示失败表示失败*/#define OVER -1 /*定义常量定义常量OVER为为-1表示结束表示结束*/typedef int ElemType;/*定义定义ElemType为为int类型类型*/typedef struct /*顺序表存储类型顺序表存储类型*/ElemType dataMAXLEN;/*存放线性表的数组存放线性表的数组*/int Length;/*Length是顺序表的长度是顺序表的长度*/SeqList;2.2.1 顺序表顺序表.2.2.2 顺序表的基本操作实现顺序表的基本操作实现1顺序表的初始化顺序表的初始化即构造一个空顺序表L,将表L的实际长度置0,算法描述见算法2.1。算法2.1 void InitList(SeqList *L)L-Length=0;/*初始的化顺序表为空*/.2顺序表的建立顺序表的建立初始化顺序表后向表中输入初始化顺序表后向表中输入n个元素建立表个元素建立表L,算法描,算法描述见算法述见算法2.2。算法算法2.2void CreateList(SeqList*L,int n)int i;printf(请输

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(数据结构实用教程(c语言版)课件.ppt)为本站会员(ziliao2023)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|