计算机导论第六章
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第6章数据结构
数据结构是一门重要的计算机专业的基础课。数据结构作为一门独立课程,在国外是从1968年开始设立,我国从20世纪80年代初才开始正式开设数据结构课程。它主要研究的内容有计算机加工对象的逻辑结构、在计算机中的表示形式以及各种针对它们的操作。数据结构是哦学习操作系统、数据库管理、编辑原理等后续课程的基础。
6.1 概述
6.1.1数据结构课程的地位
1968年美国D.E.Knuth教授开创了数据结构的最初体系,他所著的《计算机程序设计技巧》较为系统的阐述了数据的逻辑结构和储存结构及操作。从二十世纪六十年代到二十世纪七十年代,出现了大型程序,软件也相对独立,结构程序设计的主要内容越来越重视数据结构,认为程序设计的实质是对确定的问题选择一种好的结构,并设计一种好的算法。
数据结构课程较系统地介绍了软件设计中常用数据结构以及相应相应的存储结构和算法,系统介绍了常用的查找和排序技术,并对个中结构与技术进行分析和比较,内容非常丰富。数据结构在计算机科学中是一门综合性的专业基础课。数据结构涉及到多方面的知识,如计算机硬件范围的存储装置和存取方法,软件范围中的文件系统、数据的动态管理、信息检索,学范围的集合、逻辑的知识,有一些综合性的知识,数据类型、程序设计方法、数据表示、数据运算、数据存取等,因此数据结构是介于数学、计算机硬件计算机软件三者之间的一门核心课程。在计算机科学中,数据结构不仅是一般程序设计的基础,而且是设计和实现编译程序,操作系统、数据库及其他系统程序和大型应用程序的重要基础。
6.1.2基本概念和术语
随着计算机的发展和及其应用范围的不断扩大,计算机所处理的数据的数量在不断扩大,并且所处理的数据的形式也越来越多样。计算机所处理的数据已不再是单纯的数值数据,而更多的是非数值数据。这些需要处理的数据并不是杂乱无章的,他们有内在的联系,只有弄清楚它们之间的本质联系,才能使用计算机对大量的数据进行有效的处理。
例如,某学校学生的住宿情况信息如表6-1所示。
表6.-1 学生住宿情况信息表
可以看出表6-1中的数据,每一行是一个用户的有关信息,它由序号、姓名、电话号码和寝室详细地址等项组成,把序号、姓名、电话号码等项称为基本相,是有独立意义的最小标识单位,而把寝室详细地址称为组合项,组合箱是有一个或多个基本项组合组成的,是有独立意识的标识单位,把这里的每一项称为一个结点,每一个项称为一个字段,那么,结点是由若干个字段构成的,对于能唯一标识一个结点的字段或几个字段的组合,如这里的“序号”字段,称之为关键码。当药使用计算机处理这个信息表中的数据时,必须弄清楚下面3
个问题。
1. 数据的逻辑结构
表6-1中的数据数据之间的内在联系是:在这些数据中,有且只有一个节点是表首节点,他前面没有其他节点,后面一个和它相邻的节点;有且只有一个节点是表尾结点,它后面没有其他节点,前面有一个和他相同的节点;除了这两个节点之外,表中所有其他的节点都有且只有一个节点,页有且只有一个和他相邻的位于它之后的一个节点,这些就是学生住宿情况的逻辑结构。
2.数据的存储结构
将表6-1中的所以结点存入计算机时,就必须考虑存储结构,使用C语言进行设计时,常见的方式是用一个结构数组来存储整个信息表,每一个数组元素对应于信息表中一个结点。信息表中相邻的结点,对应的数组元素也是相邻的,或者说在这中存储方式下,逻辑相邻的结点就必须物理相邻。这是一种称为顺序存储的方式,当然,还有其他的存储方式。数据在计算机中的存储方式称为存储结构。
3数据的运算集合
对数据的处理必定涉及到相关的运算,在上述信息表中,可以有删除一个结点、增加一个结点等操作。应该明确指明这些操作的含义。比如删除操作,是删除序号为“00004”的结点还是删除姓名为“王洪涛”的结点是应该明确定义的,如果需要,可以定义两个不同的删除操作,为一批数据定义的所有运算(或称为操作)构成一个运算(操作)集合。
对于一批待处理的数据,只有分析清楚上面三方面的问题,才能进行有效的处理。一个数据结构就是指按一定的逻辑结构组成的一批数据,使用某种存储及认购将这批数据存于与计算机中,并在这些数据上定义了一个运算集合。在陶云一个数据结构时,数据结构所含的三方面缺一不可,即只有给定一批数据的逻辑结构和它们在计算机中的存储结构,并且定义了数据运算集合,才能确定一个数据结构。例如,在6.2.2节中将要介绍的栈和队列,它们的逻辑结构是一样的,它们都可以用同样地存储结构,但是由于它们多定义的运算性质不同,而成为两种不同的数据结构。常见的数据结构是有线性结构、树形结构和图形结构。
6.2 几种经典的数据结构
6.2.1 线性表
线性表是一种最简单的、最常见的数据结构。
1.线性的逻辑结构
线性表(Linear List)是由n (n≥0)个类型相同的数据元素a1、a2、…、a n组成的有
限序列,记作(a1,a2,…,a i-1,a i,a i+1,…,an)。这里n为线性表的长度,n=0时称为空表,,数据元素ai(1≤i≤n)只是一个抽象的符号,其具体含义在不同情况下可以不同。
此外,线性表中相邻的数据元素之间存在着次序关系,即对于非空的线性表(a1,a2,…,a i-1,a i,a i+1,…,an),表中a i-1领先于a i,称a i-1是a i的直接前驱,而称ai是
a i-1的直接后继。除了第一个元素a1外,每个元素a i有且仅有一个被称为其直接前驱的
结点a i-1,除了最后一个元素a n外,每个元素a i有且仅有一个被称为其直接后继的结点
a i+1。
例如:英文字母表(A,B,…,Z)就是一个简单的线性表,表中的每一个英文字母是一个数据元素,又如表6-1所示,表中的每个结点都是一个数据元素。
2.线性表的存储结构
(1)线性表的顺序存储