第1章 绪论
“数据结构”作为一门独立的课程在国外是从1968年才开始设立的。在这之前,它的某些内容曾在其他课程,如表处理语言中有所阐述。1968年在美国一些大学的计算机系的教学计划中,虽然把数据结构规定为一门课程,但对课程的范围仍没有作明确规定。当时,数据结构几乎和图论,特别是和表、树的理论为同义语。随后,数据结构这个概念扩充到包括网络、集合代数论、格、关系等方面,从而变成了现在称之为“离散结构”的内容。然而,由于数据必须在计算机中进行处理,因此,不仅考虑数据本身的数学性质,还必须考虑数据的存储结构,这就进一步扩大了数据结构的内容。近年来,随着数据库系统的不断发展,在“数据结构”课程中又增加了文件管理(特别是大型文件的组织等)的内容。
1968年美国唐.欧。克努特教授开创了数据结构的*初体系,他所著的《计算机程序设计》**卷《基本算法》是**本较系统地阐述数据的逻辑结构和存储结构及其操作的著作,从20世纪60年代末到70年代初,出现了大型程序,软件也相对独立,结构程序设计成为程序设计方法学的主要内容,人们就越来越重视数据结构,并认为程序设计的实质是对确定的问题选择一种好的结构,加上设计一种好的算法。从20世纪60年代中期到80年代初,各种版本的数据结构著作相继出现。
目前,在我国数据结构已经不仅仅是计算机专业教学计划中的核心课程之一,也是其他非计算机专业的主要选修课程之一。
1.1 什么是数据结构
什么是数据结构?这是一个难以直接回答的问题。一般来说,用计算机解决一个具体问题时,大致需要经过下列几个步骤:首先要从具体问题中抽象出一个适当的数学模型,然后设计一个解此数学模型的算法(algorithm),*后编出程序、进行测试、调整直至得到*终解答。寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。为了说明这个问题,首先举一个例子,然后再给出明确的含义。 假定有一个学生通讯录,记录了某校全体学生的姓名和相应住址,现在要写一个算法,要求当给定任何一个学生的姓名时,该算法能够查出该学生的住址。这样一个算法的设计将完全取决于��讯录中的学生姓名及相应的住址是如何组织的,以及计算机是怎样存储通讯录中的信息的。 如果通讯录中的学生姓名是随意排列的,其次序没有任何规律,那么当给定一个姓名时,则只能对通讯录从头开始逐个与给定的姓名比较,顺序查对,直至找到所给定的姓名为止。这种方法相当费时间,效率很低。然而,若我们对学生通讯录进行适当的组织,按学生所在班级来排列,并且再造一个索引表,这个表用来登记每个班级学生姓名在通讯录中的起始位置。这样一来,情况将大为改善。这时,当要查找某学生的住址时,则可先从索引表中查到该学生所在班级的学生姓名是从何处起始的,然后就从此起始处开始查找,而不必去查看其他部分的姓名。由于采用了新的结构,于是就可以写出一个完全不相同的算法。
……