数据结构基础概念

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第五章数据结构基础概念

本章我们将介绍有关数据结构的基础知识,要求大家熟悉数据结构中常用的名词、术语,掌握基本概念,分清逻辑结构和存储结构的性质;了解线性表的逻辑结构特性及其在计算机中的表示。

掌握线性表的顺序存储结构及其插入和删除操作的基本思想;掌握栈和队列的特点,能根据实际问题正确地选用它们,掌握栈满、栈空、队满、队空的判别方法;熟悉树型结构的描述方法,了解图的术语和概念。

5.1数据结构基本概念

1、数据结构是怎样产生的?

我们知道计算机已经不仅仅是用于科学计算了,早期的计算机确实主要用于数值处理,用于科学计算,随着计算机技术的飞速发展,计算机的应用范围不断扩大,已不再局限于单纯的数值计算,更多地应用于控制、管理及数据处理等非数值计算的处理工作。

非数值型的问题在我们日常生活中是非常多的,也需要我们使用计算机来处理这些非数值问题。

例如:在城市交通运输中,从A点到B点有很多条道路,每条道路的长度不同,拥挤程度不同,我们要选择一条最快的线路到达目的地,该如何选择?

再比如:图书馆有成千上万的图书资料,我们该如何进行管理才能使我们可以快速查找到需要的资料。

北京市有上千万的人口,我们应该怎样保存这些人口的资料信息,才能使我们可以快速查找到所需要查找的人。

象这样的问题都是典型的非数值问题。

要用计算机处理这些非数值问题,就为我们提出了一个课题:如何在计算机内部描述这些非数值问题,采用什么样的算法可以快速、有效地完成问题的求解。随着计算机技术的发展,于是就产生了数据结构。

进一步,对于不同的处理对象,要想设计出高质量的程序,就必须研究,如何组织数据和处理数据,根据问题的要求及数据元素之间的特性,确定相应的存储结构和算法,这些都是数据结构研究的内容。

我们可以通过下面的例子来认识数据结构。

电话是我们通讯联络必不可少的工具。如何用计算机来实现自动查询电话号码呢?要求对于给定的任意姓名,如果该人有电话号码,则迅速给出电话号码,否则,给出查找不到该人电话号码的信息。

对于这样的问题,我们可以按照客户向电信局申请电话号码的先后次序建立电话号码表,存储到计算机中。在这种情况下,由于电话号码表是没有任何规律的,查找时只能从第一个号码开始逐一进行,这样的逐一按顺序进行查找效率非常低。为了提高查询的效率,我

们可以根据每个用户姓名的第一个拼音字母,按照26个英文字母的顺序进行排列,这样根据姓名的第一个字母就可以迅速地进行查找,从而极大地减少了查找所需的时间。进一步,我们可以按照用户的中文姓名的汉语拼音顺序进行排序,这样就可以进一步提高查询效率了。

在上述例子中,我们感兴趣的是如何提高查找效率。为了解决这个问题,就必须了解待处理对象之间的关系,以及如何存储和表示这些数据。

在电话号码查询的例子中,每一个电话号码就是一个要处理的数据对象,我们也称为数据元素,在数据结构中为了抽象地表示不同的数据元素,为了研究对于具有相同性质的数据元素的共同特点和操作,我们将数据元素又称为数据结点,简称为结点。

电话号码经过处理,按照拼音排好了顺序,每个电话号码之间的先后次序就是数据元素之间的关系。

数据结构就是研究这类非数值处理的程序设计问题。

2、数据结构研究什么内容?

数据结构一般包含三个方面的内容:数据的逻辑结构、数据的存储结构和数据的运算。

●数据的逻辑结构是指数据元素之间的逻辑关系,与数据的在计算机内部是如何存储

无关,数据的逻辑结构独立于计算机。

例如在城市交通中,两个地点之间就存在一种逻辑关系,两个地点之间的逻辑关系

分为三种:第一种是:两个地点之间有公共汽车可以直达;第二种是:两个地点之

间没有公共汽车可以直达,但可以通过中途换乘其他公共汽车而到达;第三种逻辑

关系就是:两个地点之间没有公共汽车可以达到。

又如在电话号码本中,电话号码如何进行分类,按照什么顺序进行排列等都是数据

之间的逻辑关系。

●数据的存储结构是指数据元素在计算机存储设备中的存储方式,可以用顺序存储方

式,也可以用链式存储方式。

例如在城市交通的例子中,我们就要研究如何在计算机中表示1个地点,任何在计

算机中表示两个地点之间存在一条公共汽车线路,该线路有多长等。

又如对于电话号码资料信息在计算机中如何保存,如何表示资料的分类,如何表示

排好顺序的电话号码之间的先后次序关系。

●数据的运算主要包括:插入、删除、检索和排序等与问题相关的处理。

例如在城市交通问题中,我们就要设计求两点之间最短线路的算法,要能够判断从

城市的任一点出发乘坐公共汽车是否可以达到城市的任何地方。

在电话号码问题中,我们就要设计如何插入一个新的电话号码信息,如何删除一个

作废的电话号码信息,如何对电话号码进行快速整理排序,如何高效快速查找资料

等算法。

为了进一步研究数据的逻辑结构,我们可以将数据的逻辑结构分为线性结构和非线性结构两大类。

线性结构包括:线性表、栈和队列等。其主要特征为各个数据之间有明确的、唯一的“先后”顺序。在现实生活中具有线性结构的实例非常多,例如我们在日常生活中的排队购物,队列中的每个人都有一个明确先后次序关系。

非线性结构包括树和图型结构。

树型结构的主要特征是结点之间存在着一种层次的关系,每一个结点对应着下一层的多个结点,也就是说,数据元素之间的关系是“一对多”的关系。例如:我们一所学校下面有好几个系,每个系下面有好多班,每个班下面有好多学生。我们说:学校—系—班—学生,每一层之间都是一个一对多的关系,这就是一个典型的树型结构。

而在图型结构中,任何两个结点之间都可能存在着联系,数据元素之间存在着多对多的关系。典型的图型结构就是城市交通。如果城市中有单行线路,则从城市中的一个地点A 出发,可以到达N个不同的地方,从城市的M个不同的地方出发又可以到达地点A。城市交通就是一个典型的“多对多”的图型结构。

数据结构通常具有下列一些基本操作:

1、插入:在数据结构的指定位置上添加一个新结点。

2、删除:删去数据结构中指定位置的结点。

3、更新:修改数据结构中某个结点的值。

4、查找:在数据结构中寻找满足指定条件的结点及其位置。

5、排序:按照指定的顺序,使结点重新排列。

5.2线性结构的基本概念

线性结构是最常用且最简单的数据结构,它包括线性表、栈和队列等。

5.2.1线性表

日常生活中大量存在着这样的表格,例如一份学生名单表,一张仓库设备清单等,我们把一个人、一台设备都抽象地看成是一个数据元素,这些数据元素之间除了在表中的排列次序即先后次序不同外,没有其它的联系,这一类的表属于线性表。

这里我们使用“结点”的概念来描述线性表。结点就是对数据的一种抽象。例如在学生名单中,我们可以认为一个学生数据就是一个结点,如果一长学生名单有1000人组成,我们就可以抽象地认为,学生名单这样的线性表就是由1000个结点组成的。再比如,在一张仓库设备清单中有800台设备,我们就可以抽象地认为,仓库设备清单就是一张线性表,表中有800个结点。在这样的抽象的意义上,我们就不再关心,我们是处理学生数据还是处理设备数据,我们可以认为我们处理的数据就是“结点”。这样可以使得我们数据结构研究的算法具有通用性和一般性。

那么,从数据结构的角度出发,线性表是n(n≥0)个数据元素组成的有限序列,记为:

相关文档
最新文档