数据结构《第1章 概述》习题解答

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

第1章概述

本章学习要点

◆了解数据结构的相关概念。

◆了解并掌握数据的4种基本逻辑结构的特点。

◆了解数据的各种基本存储结构。

◆了解算法的相关概念,并能分析各种算法的时间复杂度和空间负责度。

数据结构(Data Structures)是随着计算机科学的发展而逐步形成的一门学科,目前已成为高等院校中计算机类各专业的核心课之一,同时也是统计类、经济类和工程软件设计类各专业的必修课程。本章的主要内容是对数据结构的基本概念和基本内容作一概要介绍,为此,简单回顾一下数据结构的发展与形成过程对于理解数据结构的内容和重要性是很有必要的。

1.1 数据结构的发展概况

众所周知,在40年代计算机刚诞生时,计算机所能处理的数据只能是由0或1组成的二进制数,此时还谈不上什么结构。后来虽然计算机可以处理十进制整数和十进制实数,也不过是由0到9这十个数字组成的序列,或再加上小数点,其数据的结构非常简单没有研究它的必要。

由于计算机技术的飞速发展和数据处理能力的不断提高,到60年代中期,各种高级程序设计语言相继出现,所能描述的数据类型逐渐丰富。例如,在FORTRAN语言中允许使用复数类型和数组类型数据。其中,复数是两个实数的有序对,而数组是同类型数据的一个有限序列,这自然是一种“结构”。在COBOL语言和PL/1语言中允许使用字符类型和记录类型数据,将计算机的应用领域由数值计算进一步扩充到非数值计算。其中,记录就是一种“结构”类型的数据,它把一组相互关联的不同类型的数据看作一个整体构成一种新的“结构类型”数据。有了“结构类型”的概念之后,各个数据之间不再孤立,这样便于表示和储存,也便于处理。后来,在LISP语言中又定义了一种带有层次性的表结构,并定义了许多相应的运算。这种层次结构是一种非线性的树型结构,也是本书中将要着重讨论的内容之一。

数据结构作为一门课程的形成和发展主要是在60年代后期。首先,在1968年由美国计算机协会(ACM)颁发了建议性的计算机教学计划,其中规定数据结构作为一门独立的课程,这在世界上是第一次。同一年,美国的计算机科学家D.E.Knuth教授在他的巨著《计算机程序设计的技巧》详细论述了数据的逻辑结构和数据的存储结构,并对各种结构给出了典型算法,为数据结构作为一门课程奠定了理论基础。

70年代初,随着大型程序以及大规模文件系统的出现,结构程序设计成为程序设计方法学的主要内容。在程序设计中,数据结构受到了极大的重视。认为程序设计的实质就是对要处理的问题选择一种最为适合的数据结构,同时在此结构上施加一种好的算法。1976年瑞士著名计算机科学家N.Wirth编著的《算法+数据结构=程序》一书正是这种程序设计思想的具体体现。

70年代中后期,由于数据库系统和数据检索系统的不断发展,在数据结构中进一步增加了文件管理的内容以及B-树和B+树的知识,使数据结构的内容得以丰富和进一步完善。从80年代开始,在我国高等院校的教学计划中已经将数据结构课程列为计算机类各专业的核心课程之一,在许多非计算机专业也把数据结构作为必修课或选修课程。数据结构是一门介于数学、计算机硬件和计算机软件三者之间的计算机专业基础课,是程序设计方法学、数据库

系统、操作系统、编译原理、软件工程学等课程的先修课程,是设计和实现大型应用软件的基础。

1.2 数据结构的基本术语和相关概念

数据(data)是能输入到计算机中并能被计算机处理的符号的总称,是计算机程序的加工“原料”。需要说明的是,这里的“数据”绝对不能狭义地理解为仅仅是数学中的整数或实数而已,必须作广义的理解。例如,一个有某种功能源程序,一个文件,一张图画,一段声音等等都可以通过编码而归纳为数据的范畴。

数据元素(data element)是数据的基本单位,在计算机程序中通常作为一个整体进行处理。由于数据的范围非常广泛,因此数据元素可大可小,小到一个字符;大到一本书或一张地图等等。对于较大的数据元素还能进一步分成若干个“数据项(data item)”,每个数据项也可以是由几个更小的数据项组成,这样的数据项称为“组合项”,不能再分的数据项称为“原子项”。例如,一本书的目录信息作为一个数据元素,是由各章的目录组成的,而每章的目录又是由该章中各小节的目录组成。各章的目录信息就是组合项,如果每一小节的目录不能再分成更小的单位,则称其为原子项,否则称为组合项。

关键字(key)是指数据元素中能够起标识作用的数据项。其中能够起唯一标识作用的数据项称为“主关键字”,反之称为“次关键字”。例如,每个学生的信息可以看成是一个数据元素,其中的数据项有:学号、姓名、性别、年龄和班级等等,由于每个学生都有一个唯一的学号,所以数据项“学号”是主关键字,而姓名可能存在重复所以数据项“姓名”是次关键字。

数据对象(data object)是具有相同性质的数据元素的集合,是数据的一个子集。例如,全体整数的集合N={0,±1,±2,…}就是一个数据对象,全体复数的集合C={|x,y∈R}也是一个数据对象。在程序设计中,总是针对某个特定的问题处理一种或几种数据对象,不可能在一个问题中处理所有的数据。例如,在文本编辑系统中的数据对象是文件中所出现的各种文字和符号的集合;在学生成绩管理系统中的数据对象是所有学生的成绩;在电话号码查询系统中的数据对象是全体电话用户的信息所组成的集合。

数据关系(dat relation)是数据对象中各元素之间的一种结构(或序),它反映了数据元素之间存在的一种固有联系。在数据处理时,通常把一个数据对象中两个元素之间的数据关系简单地用前驱和后继来描述。例如,某个数据对象中的两个元素a,b之间存在关系:a是b 的前驱(或b是a的后继),则可表示为或a→b。

例如,一周中的7天是一个数据对象,其中的每一天为一个数据元素,它们之间的数据关系有:,,,,,

数据的逻辑结构(data logical structure)是数据元素之间存在的逻辑(或序)关系的描述,它可以用一个数据元素的集合D,和D中各元素之间存在的所有关系的集合R来表示成DLS=(D,R)。

根据数据之间存在的不同逻辑关系,通常将逻辑结构分为以下4种基本结构:

(1)集合结构(Set)在该逻辑结构中,只有数据元素集D,而关系集为空集合,即R={}。如图1.1(a)所示的数据对象中,其数据的逻辑结构为集合结构。

(2)线性结构(Line Structure)在该结构中,除了第1个元素(记录)外,其它各元素(记录)都有唯一的直接前驱;除了最后1个元素(记录)外,其它各元素(记录)都有唯一的直接后继。数据中各元素之间存在一个对一个的关系,如图 1.1(b)所示的数据对象中,其数据的逻辑结构为线性结构。

相关文档
最新文档