数据结构教案(苏1).ppt
《数据结构教案(苏1).ppt》由会员分享,可在线阅读,更多相关《数据结构教案(苏1).ppt(192页珍藏版)》请在冰豆网上搜索。
数据结构,主讲:
苏仕华,第一章绪论,1.1引言1.2基本概念和术语1.3抽象数据类型1.4算法和算法分析1.4.1算法1.4.2算法设计的要求1.4.3算法效率的度量1.4.4算法的存储空间的需求,计算机是一门研究用计算机进行信息表示和处理的科学。
这里面涉及到两个问题:
信息的表示和信息的处理而信息的表示和组织又直接关系到处理信息的程序的效率。
随着计算机的普及,信息量的增加,信息范围的拓宽,使许多系统程序和应用程序的规模很大,结构又相当复杂。
因此,为了编写一个“好”的程序,必须分析待处理的对象的特征及各对象之间存在的关系,这就是数据结构这门课所要研究的问题。
在计算机发展的初期,人们使用计算机的主要目的是处理数值计算问题。
使用计算机解决一个具体问题时,一般需要经过下列几个步骤:
由于当时所涉及的运算对象是简单的整型、实型或布尔等类型的数据,所以程序设计者的主要精力是集中于程序设计的技巧上,而无须重视数据结构。
随着计算机应用领域的扩大和软、硬件的发展,非数值计算问题越来越显得重要。
据统计,处理非数值计算性问题占了90%以上的计算机运行时间,这类问题涉及到的数据结构更为复杂,数据元素之间的相互关系一般无法用数学方程式加以描述。
因此,解决这类问题的关键不再是数学分析和计算方法,而是要设计出合适的数据结构,才能有效地解决问题。
1.1引言著名的瑞士计算机科学家沃思(N.Wirth)教授曾提出,算法+数据结构=程序。
这里的数据结构指的是数据的逻辑结构和存储结构,而算法则是对数据运算的描述。
由此可见,程序设计的实质是对实际问题选择一种好的数据结构和设计一个好的算法,而好的算法在很大程度上取决于描述实际问题的数据结构。
因此,要设计出一个“好”的程序,就必须有好的算法,而好的算法必须建立在研究数据的特性及数据之间存在的关系的基础上。
这些正是数据结构结构这门课程所要研究的内容。
到底什么是数据结构呢?
先通过一个例子来说明有关数据结构的概念。
例【1.1】电话号码查询系统设有一个电话号码薄,它记录了N个人的名字和其相应的电话号码,假定按如下形式安排:
(a1,b1)(a2,b2)(an,bn)其中ai,bi(i=1,2n)分别表示某人的名字和对应的电话号码要求设计一个算法,当给定任何一个人的名字时,该算法能够打印出此人的电话号码,如果该电话簿中根本就没有这个人,则该算法也能够报告没有这个人的标志。
算法的设计,依赖于计算机如何存储人的名字和对应的电话号码,或者说依赖于名字和其电话号码的结构。
数据的结构,直接影响算法的选择和效率。
上述的问题是一种数据结构问题。
可将名字和对应的电话号码设计成:
二维数组、表结构、向量。
假定名字和其电话号码逻辑上已安排成n元向量的形式,它的每个元素是一个数对(ai,bi),1in数据结构还要提供每种结构类型所定义的各种运算的算法。
【例1.2】图书馆信息检索系统。
当我们根据书名查找某本书有关情况的时候;或者根据作者或某个出版社查找有关书籍的时候,或根据书刊号查找作者和出版社等有关情况的时候,只要我们建立了相关的数据结构,按照某种算法编写了相关程序,就可以实现计算机的自动检索。
若使用计算机处理上述图书检索问题,首先要建立一张图书基本信息表,列在每一行上的是一本书的信息,一般包括:
登录号、书名、作者、分类号、出版社和出版时间等项,登录号是唯一的。
如表1.1所示。
表1.1图书目录卡片表,表中的数据元素(一行)可按登录号、书名、作者名等建立相应的索引表。
这些表构成的文件就是图书目录检索的数学模型。
计算机的主要操作是按某个特定要求(如书名、作者)对书目文档进行查询检索。
诸如此类的问题还有各种查号系统、仓库管理系统、帐务处理等。
这类问题中的处理对象之间都是一种最简单的线性关系,它们所对应的数学模型称为线性的数据结构。
【例1.3】图的m着色问题。
图的着色问题是由地图的着色问题引申而来的:
用m种颜色为地图着色,使地图的每个区域着一种颜色,且相邻区域的颜色不同。
如果把一个区域收缩为一个顶点,将相邻两个区域用一条边相连接,就可以把一个区域图抽象为一个平面图和一个区域邻接关系图,如图1.1(a)、(b)所示。
(a)抽象的平面图(b)区域邻接关系图图1.1图的着色问题示意图,19世纪50年代,英国学者提出了任何地图都可以用4种颜色来着色的4着色猜想问题。
过了100多年,这个问题才由美国学者在计算机上予以证明,这就是著名的4色定理。
如在图1.1中,颜色用数字表示,字母表示区域,则图中表示了不同区域的不同着色情况。
再例如,家族的血统关系、博奕树问题(人一机下棋)、计算机的文件系统等都是一种树形结构;而城市之间的交通网络、工程管理中的活动安排以及多叉路口交通灯管理等问题是图形结构的。
它们都是一种非线性的数据结构。
通过以上几例可以直接地认为:
数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。
1.2基本概念和术语数据(Data):
是对信息的一种符号表示。
在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
例如,一个代数方程的求解程序中所使用的数据是整数和实数,而对一个文本编辑程序中使用的数据是字符串。
随着计算机的发展以及计算机应用领域的扩大,数据的含义也随之拓展了。
例如,当今计算机可以处理的图形、图像、声音等,它们也都属于数据的范畴。
数据元素(DataElement):
是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
一个数据元素可由若干个数据项组成。
数据项是数据的不可分割的最小单位。
如前例中的目录卡片表中的一张卡片(表格中的一行)、树中的一个节点、图的一个顶点等都是数据元素,有时一个数据元素可由若干个数据项(也称为字段、域、属性)组成,数据项是具有独立含义的最小标识单位。
如图书卡片信息中的登录号、书名、作者等。
数据对象(DataObject):
是性质相同的数据元素的集合。
是数据的一个子集。
例如,大写字母数据对象就是集合A,B,Z。
数据结构(DataStructure):
是相互之间存在一种或多种特定关系(结构)的数据元素的集合。
虽然至今没有一个关于数据结构的标准定义,但它一般包括以下三个方面的内容:
(1)数据元素之间的逻辑(或抽象)关系,也称为数据的逻辑结构。
(2)数据元素及其关系在计算机内的存储方式,称为数据的存储结构(物理结构)。
(3)数据的运算,即对数据元素施加的操作(行为)。
数据结构:
带结构的数据元素的集合,一个特性相同的数据元素的集合,如果在数据元素之间存在一种或多种特定的关系,则称为一个数据结构。
指的是数据元素之间存在的关系这种结构又分为逻辑结构和存储结构,数据的逻辑结构是从逻辑关系上描述数据的,它与数据元素的存储结构无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
如上一节中表1.1所表示的图书目录卡片,表中数据元素之间的逻辑关系就是一种相邻关系:
对表中任一个结点,与它相邻且在它前面的结点称为直接前趋,这种直接前驱最多只有一个;与表中任一结点相邻且在其后面的结点称为直接后继,也最多只有一个。
表中只有第一个结点没有直接前趋,称之为开始结点;也只有最后一个结点没有直接后继,称之为终端结点。
例如,表中的“操作系统”所在结点的直接前趋结点和直接后继结点分别是“数据结构”和“数据库原理”所在的结点,这种结点之间的关系就构成了图书目录卡片表的逻辑结构。
数据的逻辑结构又可分为两大类:
(1)线性结构线性结构的特征是:
数据元素(结点)之间存在着一对一的关系,且结构中有仅有一个开始结点和一个终端结点,其余结点都是有仅有一个直接前趋和一个直接后继。
因此,上述图书目录卡片表就是一个典型的线性结构。
(2)非线性结构非线性结构的特征是:
数据元素之间存在着一对多或多对多的关系,即一个结点可能有多个直接前趋和多个直接后继。
该结构包括树形结构、图形结构和网状结构等。
数据结构的逻辑结构常又细分为以下四类基本结构:
一、线性结构结构中的数据元素之间存在一对一的关系。
二、树型结构结构中的数据元素之间存在一对多的关系。
三、图状结构或网状结构结构中的数据元素之间存在多对多的关系。
四、集合结构中的数据元素除了同属于一种类型外,别无其它关系。
后三种都属于非线性结构,从关系或结构分,数据结构可归结为以下四类:
数据结构的形式定义为:
数据结构是一个二元组:
Data-Structure=(D,S)其中:
D是数据元素的有限集,S是D上关系的有限集。
例复数的数据结构定义如下:
Complex=(C,R)其中:
C是含两个实数的集合C1,C2,分别表示复数的实部和虚部。
R=P,P是定义在集合上的一种关系C1,C2。
例如,当用三个4位的十进制数表示一个含12位数的十进制数时,,3214,6587,9345a1(3214),a2(6587),a3(9345),则在数据元素a1、a2和a3之间存在着“次序”关系a1,a2、a2,a3,3214,6587,9345,6587,3214,9345,a1a2a3,a2a1a3,又例,在2行3列的二维数组中六个元素a1,a2,a3,a4,a5,a6之间存在两个关系:
行的次序关系:
row=,col=,列的次序关系:
若在6个数据元素a1,a2,a3,a4,a5,a6之间存在如下的次序关系:
|i=1,2,3,4,5,数据结构是相互之间存在着某种逻辑关系的数据元素的集合。
可见,不同的“关系”构成不同的“结构”,则构成一维数组的定义。
数据的存储结构是数据在计算机中的存储表示(映象),亦称为数据的物理结构。
它包括数据元素和关系的表示,是依赖于计算机语言的。
数据的存储结构可以用以下四种基本的存储方法实现:
(1)顺序存储方法该方法是把逻辑上相邻的结点存储在物理位置上也相邻的连续存储单元里,由此得到的存储结构称为顺序存储结构。
它通常是借助于程序设计语言的数组来描述的。
该方法主要应用于线性的数据结构,但非线性的数据结构也可通过某种线性化的方法来实现顺序存储。
(2)链接存储方法该方法是用一组不一定连续的存储单元存储逻辑上相邻的元素,元素间的逻辑关系是由附加的指针域表示的。
由此得到的存储结构称为链式存储结构。
它通常是借助于程序设计语言中的指针来描述的(3)索引存储方法该方法通常是在存储元素信息的同时,还建立附加的索引表。
表中的索引项一般形式是:
(关键字,地址),关键字是能唯一标识一个元素的一个数据项或多个数据项的组合。
(4)散列存储方法该方法的基本思想是根据元素的关键字直接计算出该元素的存储地址。
无论怎样定义数据结构,都应该将数据的逻辑结构、数据的存储结构及数据的运算这三方面看成一个整体。
因此,存储结构是数据结构不可缺少的一个方面。
同一种逻辑结构采用不同的存储方法,可以得到不同的存储结构。
选择何种存储结构来表示相应的逻辑结构,要视具体的应用系统要求而定,而主要考虑的还是运算方便及算法的时间和空间上的要求。
数据的运算是定义在数据的逻辑结构上的,每种逻辑结构都有一个运算的集合,最常用的运算有:
检索、插入、删除、更新、排序等。
数据运算是数据结构不可分割的一个方面,在给定了数据的逻辑结构和存储结构之后,按定义的运算集合及其运算性质的不同,可能导致完全不同的数据结构。
例如,若对线性表的插入、删除运算限制在表的一端进行,则该线性表称为栈;若对线性表的插入运算限制在表的一端,而删除运算限制在表的另一端,则该线性表称为队列。
数据类型:
(datatype)是和数据结构密切相关的一个概念。
所谓数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
在使用高级程序设计语言编写的程序中,每个变量、常量或表达式都有一个它所属的数据类型。
类型规定了在程序执行期间变量或表达式可能的取值范围以及在这些值上所允许的操作运算。
例如:
在FORTRAN语言中,变量的数据类型有整型、实型、和复数