




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构教程(c语言版)数据结构实用教程(C语言版) 数据结构教程(c语言版)数据结构教程数据结构教程(c语言版语言版)1253数据结构教程数据结构教程(c语言版语言版)1.1 什么是数据结构什么是数据结构v1.1.1 基本概念及术语基本概念及术语v1.1.2 数据的逻辑结构数据的逻辑结构v1.1.3 数据的存储结构数据的存储结构v1.1.4 抽象数据类型抽象数据类型数据结构教程数据结构教程(c语言版语言版)1.1.1 基本概念及术语基本概念及术语在系统的学习数据结构知识之前,先了解一些相在系统的学习数据结构知识之前,先了解一些相关概念和术语。关概念和术语。1数据(数据(Data)指所有能输入
2、到计算机中并被计算机程序处理的指所有能输入到计算机中并被计算机程序处理的符号的总称。例如,整数、实数、字符、图像、符号的总称。例如,整数、实数、字符、图像、声音等都是数据。声音等都是数据。2数据元素(数据元素(Data Element)数据元素(也称为结点)是数据的基本单位,在数据元素(也称为结点)是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处计算机程序中通常作为一个整体进行考虑和处理。一个数据元素可以由若干个数据项组成。理。一个数据元素可以由若干个数据项组成。数据项是数据处理中不可分割的最小单位。数据项是数据处理中不可分割的最小单位。数据结构教程数据结构教程(c语言版语言版)3
3、数据结构(数据结构(Data Structure)是相互之间存在一种或多种特定关系的数据元是相互之间存在一种或多种特定关系的数据元素的集合。这些数据元素不是孤立存在的,素的集合。这些数据元素不是孤立存在的,而是有着某种关系,这种关系称为结构。而是有着某种关系,这种关系称为结构。数据结构一般包括以下三个方面内容:数据结构一般包括以下三个方面内容:(1)数据元素之间的逻辑关系,也称数据的)数据元素之间的逻辑关系,也称数据的逻辑结构。逻辑结构。(2)数据元素及其关系在计算机存储器内的)数据元素及其关系在计算机存储器内的表示,称为数据的存储结构。表示,称为数据的存储结构。(3)数据的运算,即对数据施加
4、的操作。)数据的运算,即对数据施加的操作。1.1.1 基本概念及术语基本概念及术语数据结构教程数据结构教程(c语言版语言版)数据结构定义:按某种逻辑关系组织起来的一批数据,数据结构定义:按某种逻辑关系组织起来的一批数据,按一定的映像方式把它存放在计算机存储器中,并按一定的映像方式把它存放在计算机存储器中,并在这些数据上定义了一个运算的集合,就叫做数据在这些数据上定义了一个运算的集合,就叫做数据结构。结构。简言之,数据结构简言之,数据结构= 逻辑结构逻辑结构+存储结构存储结构+运算集运算集合合 。4数据类型数据类型(Data Type) 数据类型是一组性质相同的值集合以及定义在这个值数据类型是一
5、组性质相同的值集合以及定义在这个值集合上的一组操作的总称。集合上的一组操作的总称。如在高级语言中,整型类型的取值范围为:如在高级语言中,整型类型的取值范围为:-32768+32767,运算符集合为加、减、乘、,运算符集合为加、减、乘、除、取模,即除、取模,即+、-、*、/、%。1.1.1 基本概念及术语基本概念及术语数据结构教程数据结构教程(c语言版语言版)5数据类型数据类型(Data Type)高级语言中的数据类型分为两大类:高级语言中的数据类型分为两大类:(1)原子类型)原子类型其值其值是是不可分解不可分解的的。如。如C语言中的标准类型语言中的标准类型(整型、实型、字符型)。(整型、实型、
6、字符型)。(2)结构类型)结构类型其值是由若干成分按某种结构组成的,因此是其值是由若干成分按某种结构组成的,因此是可以分解的。如可以分解的。如C语言中的的构造类型(结语言中的的构造类型(结构体、共用体、枚举等类型)。构体、共用体、枚举等类型)。1.1.1 基本概念及术语基本概念及术语数据结构教程数据结构教程(c语言版语言版)1.1.2 数据的逻辑结构数据的逻辑结构1定义定义数据的逻辑结构是指数据元素之间逻辑关系描数据的逻辑结构是指数据元素之间逻辑关系描述。可以用一个二元组表示,其形式化描述述。可以用一个二元组表示,其形式化描述为:为:Data_Structure=(D,R)其中其中D是数据元素
7、的有限集合,是数据元素的有限集合,R是是D上关系上关系的有限集合。数据的逻辑结构是从逻辑关系的有限集合。数据的逻辑结构是从逻辑关系上描述数据,与数据的存储无关,是独立于上描述数据,与数据的存储无关,是独立于计算机的。计算机的。数据结构教程数据结构教程(c语言版语言版)2数据的逻辑结构的分类数据的逻辑结构的分类根据数据元素之间的逻辑关系的不同特性,分根据数据元素之间的逻辑关系的不同特性,分为下列四类基本结构,如图为下列四类基本结构,如图1-1所示。所示。(a)集合结构)集合结构 (b)线性结构)线性结构 (c)树型结构)树型结构 (d)图形结构)图形结构图图1-1 数据结构的四种基本逻辑结构数据
8、结构的四种基本逻辑结构1.1.2 数据的逻辑结构数据的逻辑结构数据结构教程数据结构教程(c语言版语言版)(1)集合)集合结构中的数据元素之间除了结构中的数据元素之间除了“同属于一个集合同属于一个集合”的关系外,别无其他关系,这是一种最简单的关系外,别无其他关系,这是一种最简单的数据结构。的数据结构。(2)线性结构)线性结构结构中的数据元素之间存在着结构中的数据元素之间存在着“一对一一对一”的关的关系。系。【例例1.1】学籍档案管理学籍档案管理假设一个学籍档案管理系统应包含如表假设一个学籍档案管理系统应包含如表1-1所所示的学生信息。示的学生信息。1.1.2 数据的逻辑结构数据的逻辑结构数据结构
9、教程数据结构教程(c语言版语言版)特点:特点:表中的每一行是一个数据元素(或记录、结点),它表中的每一行是一个数据元素(或记录、结点),它由学号、姓名、性别及出生年月等数据项组成。由学号、姓名、性别及出生年月等数据项组成。表中数据元素之间是一种先后关系,对于表中任一结表中数据元素之间是一种先后关系,对于表中任一结点,与它相邻且在它前面的结点(称为直接前驱)点,与它相邻且在它前面的结点(称为直接前驱)最多只有一个;与表中任一结点相邻且在其后的结最多只有一个;与表中任一结点相邻且在其后的结点(称为直接后继)也最多只有一个。我们将这种点(称为直接后继)也最多只有一个。我们将这种关系称为关系称为“线性
10、结构线性结构”。1.1.2 数据的逻辑结构数据的逻辑结构数据结构教程数据结构教程(c语言版语言版)(3)树型结构)树型结构结构中的数据元素之间存在着结构中的数据元素之间存在着“一对多一对多”的关的关系。系。【例例1.2】人机对弈人机对弈人与计算机进行对弈的部分图如图人与计算机进行对弈的部分图如图1-2为所示。为所示。图图1-2 人机对弈图人机对弈图1.1.2 数据的逻辑结构数据的逻辑结构数据结构教程数据结构教程(c语言版语言版)特点:特点:图中将每一个棋盘看作一个数据元素,则数据图中将每一个棋盘看作一个数据元素,则数据元素之间的关系要比表元素之间的关系要比表1-1要复杂许多。要复杂许多。图中数
11、据元素之间是一对多关系,即一个数据图中数据元素之间是一对多关系,即一个数据元素向上和一个数据元素相连(称为双亲结元素向上和一个数据元素相连(称为双亲结点),向下和多个数据元素相连(称为孩子点),向下和多个数据元素相连(称为孩子结点)。我们将这种关系称为结点)。我们将这种关系称为“树型结构树型结构”。4)图形结构或网状结构)图形结构或网状结构结构中的任意数据元素之间都可以有关系,元结构中的任意数据元素之间都可以有关系,元素之间存在着素之间存在着“多对多多对多”的关系。的关系。1.1.2 数据的逻辑结构数据的逻辑结构数据结构教程数据结构教程(c语言版语言版)(【例例1.3】制定教学计划制定教学计划
12、在制定教学计划时,需要考虑各门课程的开设在制定教学计划时,需要考虑各门课程的开设顺序。有些课程需要先导顺序。有些课程需要先导先修先修课程,有些课课程,有些课程则不需要,而有些课程又是其他课程的先程则不需要,而有些课程又是其他课程的先导导先修先修课程。比如,计算机专业课程的开设课程。比如,计算机专业课程的开设情况如表情况如表1-2所示。所示。1.1.2 数据的逻辑结构数据的逻辑结构数据结构教程数据结构教程(c语言版语言版)教学计划的关系图如图教学计划的关系图如图1-3所示。所示。图图1-3 教学计划关系图教学计划关系图特点:特点:图中数据元素存在着多对多的任意关系。一个图中数据元素存在着多对多的
13、任意关系。一个结点可能有多个直接前驱和直接后继。结点可能有多个直接前驱和直接后继。1.1.2 数据的逻辑结构数据的逻辑结构数据结构教程数据结构教程(c语言版语言版)1.1.3 数据的存储结构数据的存储结构数据在计算机中的存储表示称为数据的存储结数据在计算机中的存储表示称为数据的存储结构,也称为物理结构。数据的存储结构是逻构,也称为物理结构。数据的存储结构是逻辑结构在计算机存储器中的实现。本书将介辑结构在计算机存储器中的实现。本书将介绍常用的两种基本的存储结构:顺序存储结绍常用的两种基本的存储结构:顺序存储结构和链式存储结构。构和链式存储结构。数据的逻辑结构和存储结构的关系是:存储结数据的逻辑结
14、构和存储结构的关系是:存储结构是逻辑关系的映像与元素本身映像,是数构是逻辑关系的映像与元素本身映像,是数据结构的实现;逻辑结构是数据结构的抽象。据结构的实现;逻辑结构是数据结构的抽象。 数据结构教程数据结构教程(c语言版语言版)1. 顺序存储结构顺序存储结构顺序存储结构:借助元素在存储器中的相对位顺序存储结构:借助元素在存储器中的相对位置来表示数据元素间的逻辑关系。置来表示数据元素间的逻辑关系。【例例1.4】对于表对于表1-1提出的学生信息登记表提出的学生信息登记表进行存储,假定每个元素占用进行存储,假定每个元素占用50个存储单元,个存储单元,数据从数据从1000号单元开始由低地址向高地址号单
15、元开始由低地址向高地址存放,对应的顺序存储结构如表存放,对应的顺序存储结构如表1-3所示。所示。1.1.3 数据的存储结构数据的存储结构数据结构教程数据结构教程(c语言版语言版)顺序存储结构的主要特点:顺序存储结构的主要特点:v可实现对各数据元素的随机访问。这是因为可实现对各数据元素的随机访问。这是因为只要知道存储的首地址以及每个数据元素所只要知道存储的首地址以及每个数据元素所占的存储单元,就可以计算出各数据元素的占的存储单元,就可以计算出各数据元素的存储地址。存储地址。v不利于修改,在对数据元素进行插入、删除不利于修改,在对数据元素进行插入、删除运算时可能要移动一系列的数据元素。运算时可能要
16、移动一系列的数据元素。1.1.3 数据的存储结构数据的存储结构数据结构教程数据结构教程(c语言版语言版)2. 链式存储结构链式存储结构链式存储结构:借助指示元素存储地址的指针链式存储结构:借助指示元素存储地址的指针表示数据元素间的逻辑关系。表示数据元素间的逻辑关系。【例例1.5】对于表对于表1-1学生信息登记表进行链学生信息登记表进行链式存储时,在每个数据元素后方附加一个指式存储时,在每个数据元素后方附加一个指向向“下一个结点地址下一个结点地址”的指针字段,用于存的指针字段,用于存放后继数据元素的存储地址,每个数据元素放后继数据元素的存储地址,每个数据元素的地址是随机的,可以不连续。对应的链式
17、的地址是随机的,可以不连续。对应的链式存储结构见表存储结构见表1-4所示。所示。1.1.3 数据的存储结构数据的存储结构数据结构教程数据结构教程(c语言版语言版)链式存储结构的主要特点:链式存储结构的主要特点:v利于修改,在对数据元素进行插入、删除运利于修改,在对数据元素进行插入、删除运算时,仅需修改数据元素的指针字段值,而算时,仅需修改数据元素的指针字段值,而不必移动数据元素。不必移动数据元素。v由于逻辑上相邻的数据元素在存储位置中不由于逻辑上相邻的数据元素在存储位置中不一定相邻,因此,链式存储结构不能对数据一定相邻,因此,链式存储结构不能对数据元素进行随机访问。元素进行随机访问。1.1.3
18、 数据的存储结构数据的存储结构数据结构教程数据结构教程(c语言版语言版)1.1.4 抽象数据类型抽象数据类型1抽象数据类型的定义抽象数据类型的定义抽象数据类型(抽象数据类型(Abstract Data Type,简,简称称ADT)是指一个数学模型以及定义在该模)是指一个数学模型以及定义在该模型上的一组操作。型上的一组操作。2抽象数据类型的表示抽象数据类型的表示抽象数据类型实际上就是对该数据结构的定义。抽象数据类型实际上就是对该数据结构的定义。因为它定义了一个数据的逻辑结构以及在此因为它定义了一个数据的逻辑结构以及在此结构上的一组算法。可以用一个三元组表示:结构上的一组算法。可以用一个三元组表示
19、:ADT=(,)(,)其中,其中,D是数据对象,是数据对象,S是是D上的关系集,上的关系集,P是是对对D的基本操作集。的基本操作集。数据结构教程数据结构教程(c语言版语言版)抽象数据类型通常是指由用户定义,用以表示应用问抽象数据类型通常是指由用户定义,用以表示应用问题的数据类型,抽象数据类型由基本的数据类型组题的数据类型,抽象数据类型由基本的数据类型组成,并包括一组相关的服务(或称操作)。成,并包括一组相关的服务(或称操作)。抽象数据类型有些类似于抽象数据类型有些类似于pascal语言中的记录语言中的记录(record)类型和)类型和c语言中的构造(语言中的构造(struct)类型,)类型,但
20、它增加了相关的服务。但它增加了相关的服务。3ADT的两个重要特征的两个重要特征(1)数据抽象用)数据抽象用ADT描述程序处理的实体时,强调描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)。部用户的接口(即外界使用它的方法)。(2)数据封装将实体的外部特性和其内部实现细节分)数据封装将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节。离,并且对外部用户隐藏其内部实现细节。1.1.4 抽象数据类型抽象数据类型数据结构教程数据结构教程(c语言版语言版)1.2 算法和算法分析算法和算
21、法分析v1.2.1 算法的概念算法的概念v1.2.2 算法分析算法分析v1.2.3 相关相关C语言知识回顾语言知识回顾数据结构教程数据结构教程(c语言版语言版)1.2.1 算法的概念算法的概念1算法的定义算法的定义瑞士著名的计算机科学家瑞士著名的计算机科学家N.Wirth所提出的著所提出的著名公式名公式“程序程序=算法算法+数据结构数据结构”,所谓算,所谓算法,就是为解决特定问题而采取的步骤和方法,就是为解决特定问题而采取的步骤和方法。法。2算法的特性算法的特性一个算法应该具有下列特性:一个算法应该具有下列特性:(1)有穷性:一个算法必须(对任何合法的)有穷性:一个算法必须(对任何合法的输入值
22、)在执行有限步之后结束。输入值)在执行有限步之后结束。(2)确定性:算法中的每一条指令必须有确)确定性:算法中的每一条指令必须有确切的含义,不会产生二义性。切的含义,不会产生二义性。数据结构教程数据结构教程(c语言版语言版)(3)可行性:算法中描述的操作都可以通过)可行性:算法中描述的操作都可以通过执行有限次基本操作来实现。执行有限次基本操作来实现。(4)输入:一个算法有零个或多个输入。)输入:一个算法有零个或多个输入。(5)输出:一个算法必有一个或多个输出。)输出:一个算法必有一个或多个输出。3算法的评价算法的评价要设计一个好的算法通常需要考虑以下几方面要设计一个好的算法通常需要考虑以下几方
23、面的要求:的要求:(1)正确性:要求算法能够正确地执行预先)正确性:要求算法能够正确地执行预先规定的功能,并达到所期望的性能要求。规定的功能,并达到所期望的性能要求。(2)可读性:为了便于理解、测试和修改算)可读性:为了便于理解、测试和修改算法,算法应该具有良好的可读性。法,算法应该具有良好的可读性。1.2.1 算法的概念算法的概念数据结构教程数据结构教程(c语言版语言版)(3)健壮性:当输入非法的数据时,算法应)健壮性:当输入非法的数据时,算法应能恰当地做出反应或进行相应处理,而不是能恰当地做出反应或进行相应处理,而不是产生莫名奇妙的输出结果。并且处理出错的产生莫名奇妙的输出结果。并且处理出
24、错的方法不应是中断程序的执行,而是返回一个方法不应是中断程序的执行,而是返回一个表示错误或错误性质的值,以便在更高的抽表示错误或错误性质的值,以便在更高的抽象层次上进行处理。象层次上进行处理。(4)高效性:对同一个问题,执行时间越短,)高效性:对同一个问题,执行时间越短,算法的效率越高。算法的效率越高。(5)低存储量:完成相同的功能,执行算法)低存储量:完成相同的功能,执行算法所占用的存储空间应尽可能的少。所占用的存储空间应尽可能的少。1.2.1 算法的概念算法的概念数据结构教程数据结构教程(c语言版语言版)4算法的描述算法的描述为了表示一个算法,可以用多种不同的方法,为了表示一个算法,可以用
25、多种不同的方法,常用的有自然语言、传统流程图、结构化流常用的有自然语言、传统流程图、结构化流程图、程图、N-S流程图等表示。本书采用流程图等表示。本书采用C的描的描述语言实现对各种数据结构及算法的操作描述语言实现对各种数据结构及算法的操作描述,算法是以函数形式描述,描述如下:述,算法是以函数形式描述,描述如下:类型标识符类型标识符 函数名函数名(形式参数表形式参数表)/*算法说明算法说明*/ 语句序列语句序列 1.2.1 算法的概念算法的概念数据结构教程数据结构教程(c语言版语言版)1.2.2 算法分析算法分析在算法满足正确性的前提下,如何评价不同算法的优在算法满足正确性的前提下,如何评价不同
26、算法的优劣呢?通常主要考虑算法的时间复杂度和空间复杂劣呢?通常主要考虑算法的时间复杂度和空间复杂度这两方面。一般情况下,鉴于运算空间(内存)度这两方面。一般情况下,鉴于运算空间(内存)较为充足,所以把算法的时间复杂度作为重点分析。较为充足,所以把算法的时间复杂度作为重点分析。1. 时间复杂度(时间复杂度(Time Complexity)一个算法所需的运算时间通常与所解决问题的规模大一个算法所需的运算时间通常与所解决问题的规模大小有关。问题规模是一个和输入有关的量,用小有关。问题规模是一个和输入有关的量,用n 表表示问题规模的量,把算法运行所需的时间示问题规模的量,把算法运行所需的时间T表示为表
27、示为n的函数,记为的函数,记为T(n)。不同的。不同的T(n)算法,当算法,当n增长时,增长时,运算时间增长的快慢很不相同。一个算法所需的执运算时间增长的快慢很不相同。一个算法所需的执行时间就是该算法中所有语句执行次数之和。当行时间就是该算法中所有语句执行次数之和。当n逐渐增大时逐渐增大时T(n)的极限情况,一般简称为时间复杂的极限情况,一般简称为时间复杂度。度。数据结构教程数据结构教程(c语言版语言版)当讨论一个程序的运行时间时,注重的不是当讨论一个程序的运行时间时,注重的不是T(n)的具体值,而是它的增长率。的具体值,而是它的增长率。T(n)的的增长率与算法中数据的输入规模紧密相关,增长率
28、与算法中数据的输入规模紧密相关,而数据输入规模往往用算法中的某个变量的而数据输入规模往往用算法中的某个变量的函数来表示,通常是函数来表示,通常是f(n)。随着数据输入规。随着数据输入规模的增大,模的增大,f(n)的增长率与的增长率与T(n)的增长率的增长率相近,因此相近,因此T(n)同同f(n)在数量级上是一致在数量级上是一致的。记作:的。记作:T(n)=O(f(n)其中,大写字母其中,大写字母O为为Order(数量级数量级)的字头,的字头,f(n)为函数形式,如为函数形式,如T(n)=O(n2)。1.2.2 算法分析算法分析数据结构教程数据结构教程(c语言版语言版)注意,当注意,当T(n)为
29、多项式时,可只取其最高次为多项式时,可只取其最高次幂项并省略其系数,其它的次幂项及系数均幂项并省略其系数,其它的次幂项及系数均略去不写。一般地,对于足够大的略去不写。一般地,对于足够大的n,常用,常用的时间复杂性存在以下顺序:的时间复杂性存在以下顺序: O(1)O(log2n)O(n)O(nlog2n)O(n2)O(n3)O(2n)算法时间复杂度的数量级越大,表示该算法的算法时间复杂度的数量级越大,表示该算法的效率越低,反之越高。例如效率越低,反之越高。例如 O(1)为常数数为常数数量级量级,,即算法的时间复杂性与输入规模即算法的时间复杂性与输入规模n无无关。关。1.2.2 算法分析算法分析数
30、据结构教程数据结构教程(c语言版语言版)【例例1.6】分析以下算法的时间复杂度。分析以下算法的时间复杂度。x=0;y=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 算法分析算法分析数据结构教程数据结构教程(c语言版语言版)【例例1.7】分析以下算法的时间复杂度。分析以下算法的时间复杂度。 i=1;
31、 while(i=n) i=2*i; (1) 执行执行f(n)次次解:设语句(解:设语句(1)执行次数是)执行次数是f(n),则,则2f(n)n得到得到T(n)=O(log2n)1.2.2 算法分析算法分析数据结构教程数据结构教程(c语言版语言版)【例例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=
32、0; for(k=1;k成员名成员名 等价于:等价于:(*指针名指针名).成员名成员名 等价于:结构体变量名等价于:结构体变量名.成员名成员名在本书中,在程序内大量使用结构体类型的指在本书中,在程序内大量使用结构体类型的指针,所以大都采用第一种写法。针,所以大都采用第一种写法。1.2.3 相关相关C语言知识回顾语言知识回顾数据结构教程数据结构教程(c语言版语言版)(4)用)用typedef定义类型定义类型除了可以直接使用除了可以直接使用C提供的标准类型名和自己提供的标准类型名和自己声明的结构体类型外,还可以用声明的结构体类型外,还可以用typedef声声明新的类型名来代替已有的类型名。其基本明
33、新的类型名来代替已有的类型名。其基本定义格式如下:定义格式如下:【格式格式】typedef 原类型名原类型名 新类型名新类型名;其中,其中,typedef为关键字,表示重定义。原类为关键字,表示重定义。原类型名是型名是C语言提供的任语言提供的任意意一种数据类型,可一种数据类型,可以是简单数据类型,也可以是构造数据类型。以是简单数据类型,也可以是构造数据类型。新类型名为原类型名的一个别名。使用新类新类型名为原类型名的一个别名。使用新类型名就像使用原类型名那样定义变量。型名就像使用原类型名那样定义变量。1.2.3 相关相关C语言知识回顾语言知识回顾数据结构教程数据结构教程(c语言版语言版)2动态存
34、储分配函数动态存储分配函数C语言提供了动态分配函数来实现动态存储分配。最常语言提供了动态分配函数来实现动态存储分配。最常用的动态存储分配函数有以下两个。用的动态存储分配函数有以下两个。(1)分配内存空间函数)分配内存空间函数malloc()【格式格式】(类型名类型名 *)malloc(要分配的内存字节数要分配的内存字节数size)【功能功能】在内存中分配一个长度为在内存中分配一个长度为size的连续存储空的连续存储空间,返回值是新分配存储空间的首地址,若内存不间,返回值是新分配存储空间的首地址,若内存不足,则返回足,则返回NULL。其中,类型名表示把该存储空。其中,类型名表示把该存储空间用于何
35、种数据类型。(类型名间用于何种数据类型。(类型名 *)表示把)表示把malloc函数返回值强制转换为该类型指针。函数返回值强制转换为该类型指针。1.2.3 相关相关C语言知识回顾语言知识回顾数据结构教程数据结构教程(c语言版语言版)(2)释放内存空间函数)释放内存空间函数free()【格式格式】free(指向要释放单元的指针名指向要释放单元的指针名)【功能功能】释放该指针所指的一块存储空间,该释放该指针所指的一块存储空间,该空间系统可另作它用。注意这个指针所指的空间系统可另作它用。注意这个指针所指的空间必须是由空间必须是由malloc()函数和函数和calloc()函函数分配的才行。数分配的才
36、行。free函数无返回值。例如:函数无返回值。例如:int *pt;pt=(int *)malloc(sizeof(int);free(pt);程序段表示释放程序段表示释放pt指向的存储空间。指向的存储空间。1.2.3 相关相关C语言知识回顾语言知识回顾数据结构教程数据结构教程(c语言版语言版)3函数的定义与调用函数的定义与调用在本书中,绝大多数的算法都是编写成在本书中,绝大多数的算法都是编写成C语言的函数,语言的函数,这些函数需要通过编写相应的主函数才能被执行。这些函数需要通过编写相应的主函数才能被执行。(1)函数的定义)函数的定义函数的定义如下:函数的定义如下:【格式格式】函数类型函数类型
37、 函数名(形参表)函数名(形参表) 内部变量定义内部变量定义 函数主体语句函数主体语句返回语句返回语句 1.2.3 相关相关C语言知识回顾语言知识回顾数据结构教程数据结构教程(c语言版语言版)(2)函数的调用)函数的调用【格式格式】函数类型函数类型 函数名(实参表)函数名(实参表); 【说明说明】1实参表中各参数应与形参表中各参数类型实参表中各参数应与形参表中各参数类型及个数相符。及个数相符。2在调用函数时,表达式应与该函数的类型在调用函数时,表达式应与该函数的类型相符,如果该函数有返回值时,在调用时要相符,如果该函数有返回值时,在调用时要将该函数的返回值赋给相同类型的变量。将该函数的返回值赋
38、给相同类型的变量。1.2.3 相关相关C语言知识回顾语言知识回顾数据结构教程数据结构教程(c语言版语言版)4 Turbo C 2.0中的汉字显示中的汉字显示在在TurboC 2.0中,如果想输入和显示汉字,中,如果想输入和显示汉字,需要使用需要使用UCDOS汉字系统。但现在的汉字系统。但现在的Windows操作系统不支持操作系统不支持UCDOS汉字系汉字系统的统的16位显示。下面介绍一种能在位显示。下面介绍一种能在Windows XP系统环境下,在系统环境下,在TurboC 2.0中使用中使用UCDOS的汉字系统的方法。的汉字系统的方法。1.2.3 相关相关C语言知识回顾语言知识回顾数据结构教
39、程数据结构教程(c语言版语言版)(1)将)将UCDOS的核心文件进行兼容性设置的核心文件进行兼容性设置(有的机器可省略这步,直接执行(有的机器可省略这步,直接执行(2)。)。点点“开始开始”菜单菜单-“所有程序所有程序”-“附件附件”-“程序兼容性向导程序兼容性向导”-“我想手动定位程我想手动定位程序序”-“浏览浏览”-win98-256色,色,640X480-程序工程序工作正确吗?选作正确吗?选“是,设置此程序为一直使用是,设置此程序为一直使用兼容性设置。兼容性设置。”完成。有的完成。有的UCDOS版本的版本的核心文件是核心文件是knlvga.exe,也要照此进行兼,也要照此进行兼容性设置。
40、容性设置。1.2.3 相关相关C语言知识回顾语言知识回顾数据结构教程数据结构教程(c语言版语言版)(2)运行)运行UCDOS系统文件的方法。系统文件的方法。进入到命令提示符(进入到命令提示符(MS-DOS状态)(状态)(“开开始始”-“程序程序”-“附件附件”-“命令提示命令提示符符”)切换到)切换到UCDOS目录。(带下划线文目录。(带下划线文字为输入的命令信息,字为输入的命令信息,“ ”表示回车键。表示回车键。假设假设UCDOS文件夹在文件夹在C盘根目录内,可输盘根目录内,可输入如下命令:)入如下命令:)C:Documents and Settingscd (回到(回到C盘根目录下)盘根目
41、录下)C:cd Ucdos (进入(进入UCDOS的目录)的目录)1.2.3 相关相关C语言知识回顾语言知识回顾数据结构教程数据结构教程(c语言版语言版)这时不要运行这时不要运行UCDOS.BAT,分别一项一项,分别一项一项命令运行。如:命令运行。如:C:UDOS C:UDOS C:UDOS C:UDOS C:UDOS (五笔输入,如不(五笔输入,如不用五笔可省略此步)用五笔可省略此步) (注:可直接输入命令名,如输入(注:可直接输入命令名,如输入“rd16 ”,省略扩展名,省略扩展名“.com”) 1.2.3 相关相关C语言知识回顾语言知识回顾数据结构教程数据结构教程(c语言版语言版)就可以
42、顺利进入就可以顺利进入ucdos。然后,退出。然后,退出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语言知识回顾语言知识回顾数据结构教程数据结构教程(c语言版语言版)(3)常用的)常用的Turbo C2.0
43、快捷键快捷键Alt+F:文件菜单:文件菜单Load 打开文件打开文件 Save 保存保存 Write to 另存为另存为 Quit 退出退出Alt+R:运行菜单:运行菜单Run(或(或Ctrl+F9) 运行程序运行程序 User Screen (或或Alt+F5) 查看运行结果查看运行结果Alt+E:编辑(显示光标,有时调试有错时可:编辑(显示光标,有时调试有错时可将光标重新显示在编辑区)将光标重新显示在编辑区)F9:编译系统查错:编译系统查错1.2.3 相关相关C语言知识回顾语言知识回顾数据结构教程数据结构教程(c语言版语言版)(4)更改汉字输入法)更改汉字输入法Alt+F1 区位区位Alt
44、+F2 全拼全拼Alt+F3 双拼双拼Alt+F5 五笔(必须在五笔(必须在UCDOS中输入中输入wb命命令才能用此项)令才能用此项)Alt+F6 英文英文单次按右单次按右shift键键 可显示或隐藏中文输入法可显示或隐藏中文输入法1.2.3 相关相关C语言知识回顾语言知识回顾数据结构教程数据结构教程(c语言版语言版)1.3本章小结本章小结本章主要介绍了有关数据结构的以下几方面:本章主要介绍了有关数据结构的以下几方面:(1)数据结构主要研究数据的逻辑结构、存)数据结构主要研究数据的逻辑结构、存储结构和运算方法。储结构和运算方法。(2)数据的逻辑结构包括:集合、线性结构、)数据的逻辑结构包括:集
45、合、线性结构、树型结构、图形结构四种基本类型。树型结构、图形结构四种基本类型。(3)数据的存储结构包括:顺序存储结构和)数据的存储结构包括:顺序存储结构和链式存储结构。链式存储结构。(4)算法是对特定问题求解步骤的一种描述,)算法是对特定问题求解步骤的一种描述,是指令的有限序列。算法具有:有穷性、确是指令的有限序列。算法具有:有穷性、确定性、正确性、输入、输出等特性。定性、正确性、输入、输出等特性。(5)算法的时间复杂度与空间复杂度。)算法的时间复杂度与空间复杂度。数据结构教程数据结构教程(c语言版语言版) 数据结构实用教程(C语言版) 中国水利水电出版社数据结构教程数据结构教程(c语言版语言
46、版)数据结构教程数据结构教程(c语言版语言版)12345数据结构教程数据结构教程(c语言版语言版)2.1 2.1 线性表的基本概念线性表的基本概念v2.1.1 线性表的定义线性表的定义v2.1.2 线性表的基本操作线性表的基本操作数据结构教程数据结构教程(c语言版语言版)2.1.1 线性表的定义线性表的定义1. 线性表的定义线性表的定义线性表是具有相同数据类型的线性表是具有相同数据类型的n(n=0)个)个数据元素的有限序列,通常记为:数据元素的有限序列,通常记为:(a1,a2, ai-1,ai,ai+1,an) 其中其中n为表长,当为表长,当n=0时称为空表。时称为空表。 在线性表中相邻元素之
47、间存在着顺序关系。如在线性表中相邻元素之间存在着顺序关系。如对于元素对于元素ai 而言,而言,ai-1 称为称为 ai 的直接前驱,的直接前驱,ai+1 称为称为 ai 的直接后继。的直接后继。数据结构教程数据结构教程(c语言版语言版)2. 线性表的特点线性表的特点(1)有且仅有一个开始结点()有且仅有一个开始结点(a1),它没有),它没有直接前驱;直接前驱;(2)有且仅有一个终端结点()有且仅有一个终端结点(an),它没有),它没有直接后继;直接后继;(3)除了开始结点和终端结点以外,其余的)除了开始结点和终端结点以外,其余的结点都有且仅有一个直接前驱和一个直接后结点都有且仅有一个直接前驱和
48、一个直接后继。继。 2.1.1 线性表的定义线性表的定义数据结构教程数据结构教程(c语言版语言版)2.1.2 线性表的基本操作线性表的基本操作数据结构的运算是定义在逻辑结构层次上的,数据结构的运算是定义在逻辑结构层次上的,而运算的具体实现是建立在存储结构上的。而运算的具体实现是建立在存储结构上的。下面定义的线性表的基本操作仅是定义在逻下面定义的线性表的基本操作仅是定义在逻辑结构上的,每一个操作的具体实现只有在辑结构上的,每一个操作的具体实现只有在确定了线性表的存储结构之后才能完成。确定了线性表的存储结构之后才能完成。线性表的基本操作有:线性表的基本操作有:(1)初始化线性表)初始化线性表Ini
49、tList(L)。其作用是建立一个空表其作用是建立一个空表L(即建立线性表的构(即建立线性表的构架,但不包含任何数据元素)。架,但不包含任何数据元素)。数据结构教程数据结构教程(c语言版语言版)(2)求线性表的长度)求线性表的长度GetLength(L)。其作。其作用是返回线性表用是返回线性表L的长度(即所含数据元素的长度(即所含数据元素的个数)。的个数)。(3)求线性表中第)求线性表中第i个元素个元素GetElem(L,i,x)。其作用是在其作用是在1iGetLength(L)返回成功,返回成功,并用并用x存储线性表存储线性表L的第的第i个元素的值。个元素的值。(4)按值查找操作)按值查找操
50、作Locate(L,x)。在线性表。在线性表L查找一个与给定值查找一个与给定值x相等的数据元素,其作相等的数据元素,其作用是若存在一个或多个与用是若存在一个或多个与x相等的数据元素,相等的数据元素,则返回的元素所在位置的最小值或地址值;则返回的元素所在位置的最小值或地址值;否则返回否则返回0或或NULL值。值。2.1.2 线性表的基本操作线性表的基本操作数据结构教程数据结构教程(c语言版语言版)(5)插入操作)插入操作InsElem(L,i,x)。其作用是在线性表。其作用是在线性表L的第的第i个位置上插入一个值为个位置上插入一个值为 x 的新元素,使线性表的新元素,使线性表L由(由(a1,a2
51、, ai-1,ai,ai+1,an)变为()变为(a1,a2, ai-1,x,ai,ai+1,an)。其中)。其中1iGetLength(L)+1。(6)删除操作)删除操作DelElem(L,i,x)。其作用是删除线性表。其作用是删除线性表L的第的第i个位置的数据元素并用个位置的数据元素并用x将其存储,使线性表将其存储,使线性表L由(由(a1,a2, ai-1,ai,ai+1,an)变为()变为(a1,a2, ai-1,ai+1,an)。其中)。其中1iGetLength(L)。(7)输出元素值)输出元素值DispList(L)。其作用是依次扫描线性。其作用是依次扫描线性表表L,并输出各元素的
52、值。,并输出各元素的值。2.1.2 线性表的基本操作线性表的基本操作数据结构教程数据结构教程(c语言版语言版)2.2 顺序表顺序表v2.2.1 顺序表顺序表v2.2.2 顺序表的基本操作实现顺序表的基本操作实现数据结构教程数据结构教程(c语言版语言版)1. 顺序表的定义顺序表的定义数据结构在内存中的表示通常有两种形式,即顺序存数据结构在内存中的表示通常有两种形式,即顺序存储表示和链式存储表示。线性表的顺序存储表示又储表示和链式存储表示。线性表的顺序存储表示又称为顺序表。线性表的顺序存储是指用一组地址连称为顺序表。线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表的数据元素,我们把续的存
53、储单元依次存储线性表的数据元素,我们把用这种存储形式存储的线性表称为顺序表。用这种存储形式存储的线性表称为顺序表。假设顺序表假设顺序表(a1,a2, ai-1,ai,ai+1,an),每,每个数据元素占用个数据元素占用d个存储单元,则元素个存储单元,则元素ai的存储位置的存储位置为:为:Loc(ai)= Loc(a1)+(i-1)d 1in2.2.1 顺序表顺序表数据结构教程数据结构教程(c语言版语言版)其中,其中,Loc(a1)是顺序表第一个元素是顺序表第一个元素a1的存储位置,的存储位置,通称为顺序表的起始地址。顺序存储结构示意图如通称为顺序表的起始地址。顺序存储结构示意图如图图2-1所示
54、。所示。顺序表的存储特点:顺序表的存储特点:(1)顺序表的逻辑顺序和物理顺序是一致的。)顺序表的逻辑顺序和物理顺序是一致的。(2)顺序表中任意一个数据元素都可以随机存取,所)顺序表中任意一个数据元素都可以随机存取,所以顺序表是一种随机存取的存储结构。以顺序表是一种随机存取的存储结构。2.2.1 顺序表顺序表数据结构教程数据结构教程(c语言版语言版)2. 顺序表的类型定义顺序表的类型定义#define MAXLEN 100 /*定义常量定义常量MAXLEN为为100表示存表示存储空间总量储空间总量*/#define OK /*定义常量定义常量OK为为1表示成功表示成功*/#define ERRO
55、R 0 /*定义常量定义常量ERROR为为0表示失败表示失败*/#define OVER -1 /*定义常量定义常量OVER为为-1表示结束表示结束*/typedef int ElemType; /*定义定义ElemType为为int类型类型*/ typedef struct /*顺序表存储类型顺序表存储类型*/ ElemType dataMAXLEN; /*存放线性表的数组存放线性表的数组*/int Length; /*Length是顺序表的长度是顺序表的长度*/SeqList;2.2.1 顺序表顺序表数据结构教程数据结构教程(c语言版语言版)2.2.2 顺序表的基本操作实现顺序表的基本操作
56、实现1顺序表的初始化顺序表的初始化顺序表的初始化即构造一个空顺序表顺序表的初始化即构造一个空顺序表L,将表,将表L的实际长度置的实际长度置0,算法描述见算法,算法描述见算法2.1。算法算法2.1 void InitList( SeqList *L ) L-Length=0; /*初初始的始的化化顺序表为空顺序表为空*/ 数据结构教程数据结构教程(c语言版语言版)2顺序表的建立顺序表的建立初始化顺序表后向表中输入初始化顺序表后向表中输入n个元素建立表个元素建立表L,算法描,算法描述见算法述见算法2.2。算法算法2.2void CreateList(SeqList *L,int n) int i;
57、printf(请输入各个元素值:请输入各个元素值:n);for(i=0;idatai);L-Length=i;2.2.2 顺序表的基本操作实现顺序表的基本操作实现数据结构教程数据结构教程(c语言版语言版)3求顺序表的长度操作求顺序表的长度操作返回顺序表返回顺序表L的的Length值,算法描述见算法值,算法描述见算法2.3。算法算法2.3int GetLength(SeqList *L ) return L-Length ; 4查找操作查找操作顺序表的查找分为按值与按序号查找,下面将分别介顺序表的查找分为按值与按序号查找,下面将分别介绍这两种方法的实现,读者可根据具体的问题相应绍这两种方法的实现
58、,读者可根据具体的问题相应选择所需的查找方法。选择所需的查找方法。2.2.2 顺序表的基本操作实现顺序表的基本操作实现数据结构教程数据结构教程(c语言版语言版)(1)按号查找)按号查找查找顺序表中第查找顺序表中第i个元素的值,在个元素的值,在i无效时返回出错,有无效时返回出错,有效时返回成功,并用效时返回成功,并用x存储第存储第i个元素的值,算法描述个元素的值,算法描述见算法见算法2.4。算法算法2.4int GetElem(SeqList *L, int i, ElemType *x) if (iL-Length)return ERROR;else *x = L-datai-1;return
59、 OK;2.2.2 顺序表的基本操作实现顺序表的基本操作实现数据结构教程数据结构教程(c语言版语言版)2)按值查找操作)按值查找操作顺序表中的按值查找是指在顺序表中查找与给定值顺序表中的按值查找是指在顺序表中查找与给定值x相等的数据相等的数据元素的所在位置,算法描述见算法元素的所在位置,算法描述见算法2.5。算法算法2.5int Locate(SeqList *L, ElemType x) int i=0;while(i Length & L-datai!= x)i+;if (iL-Length) return ERROR;elsereturn i+1; /*返回的是元素位置返回的是元
60、素位置*/2.2.2 顺序表的基本操作实现顺序表的基本操作实现数据结构教程数据结构教程(c语言版语言版)2.2.2 顺序表的基本操作实现顺序表的基本操作实现5插入操作插入操作 线性表的插入是指在表的第线性表的插入是指在表的第i个位置上插入一个值为个位置上插入一个值为 x 的新元素,插入后使原表长增的新元素,插入后使原表长增1,原顺序表如图,原顺序表如图2-2所示。所示。数据结构教程数据结构教程(c语言版语言版)5插入操作插入操作步骤如下:步骤如下:(1) 将将anai 之间的所有结点依次后移,之间的所有结点依次后移,为新元素让出第为新元素让出第i个位置,如图个位置,如图2-3所示。所示。数据结构教程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石楼县2025年数学四下期末监测试题含解析
- 江苏省宿迁市泗洪县2025届四年级数学第二学期期末联考试题含解析
- 江苏省常州市武进区礼嘉中学2025届高三5月模拟(三模)语文试题含解析
- 酒泉市金塔县2025年数学三下期末联考模拟试题含解析
- 个人购房合同样本
- 智慧农业技术-提升农村人居环境质量
- 大型超市收银员劳动合同书
- 辽宁省辽阳市灯塔市2019-2020学年八年级上学期期末物理试题【含答案】
- 劳动合同续签意向协议书范本
- 个人产品分销合同
- DBJ51T 108-2018 四川省建筑岩土工程测量标准
- 2025年国家保密基本知识考试题库及答案
- 2024年四川省成都市武侯区中考化学二模试卷附解析
- 《大学生创新创业基础》全套教学课件
- CB/T 3784-1996木材产品物资分类与代码
- (整理)变频器电力电缆标准
- 《西方音乐史》课件柴可夫斯基
- 人力资源部岗位廉洁风险点及防范措施
- PRS-778S500-100-090721技术使用说明书
- 求一个数比另一个数多几少几应用题
- 职业卫生健康题库
评论
0/150
提交评论