数据结构的基本概念
"数据结构"是介于数学、计算机硬件和软件三者之间的一门核心课程。
当用计算机解决一个具体问题时,大致需要经过以下几个步骤:首先要从具体问题中抽象出一个适当的数学模型,然后设计一个解此数学模型的算法,最后编出程序、进行测试和调整直到得到最终解答。
寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。
计算机算法与数据的机构密切相关,算法无不依附于具体的数据结构,数据结构直接关系到算法的选择和效率。
由于数值计算性问题所涉及的运算对象是简单的整型、实型或布尔类型数据,所以程序设计者的主要精力集中于程序设计的技巧上,而无须重视数据结构。随着计算机应用领域的扩大和软、硬件的发展,非数值计算问题越来越显得重要。据统计,当今处理非数值计算性问题占用了90%以上的机器时间。这类问题涉及的数据结构更为复杂,数据元素之间的相互关系一般无法用数学方程式加以描述。因此,解决这类问题的关键不再是数学分析和计算方法,而是要设计出合适的数据结构,才能有效地解决问题。
非数值计算问题的数学模型不再是数学方程,而是诸如表、树、图之类的数据结构
有关概念和术语
1.数据
数据(Data)是人们利用文字符号、数学符号以及其他规定的符号对现实世界的事物及其活动所作的描述。在计算机科学中,数据的含义非常广泛,我们把一切能够输入到计算机中并被计算机程序处理的信息,包括文字、表格、图像等,都称为数据。
2.数据元素
数据元素(Data Element)是组成数据的基本单位。在不同的条件下,数据元素又可称为元素、节点、顶点、记录等。在程序中通常把节点作为一个整体进行考虑和处理。
3.数据对象
数据对象(Date Object)是性质相同的数据元素的集合,是数据的一个子集。无论数据元素是无限集,有限集,还是多个数据项组成的复合数据元素,只要性质相同,都是同一个数据对象。
4.数据结构
数据结构(Data Stucture)是研究数据元素之间抽象化的相互关系和这种关系在计算机中存储表示(即数据的逻辑机构和物理结构)并对这种结构定义相适应的运算,设计出相应的算法,而且确保经过这些运算后所得到的新结构仍然是原先的结构类型。
根据数据元素间关系的不同特性,通常有下列四类基本的结构
1)集合结构
在集合结构中,数据元素间的关系是"属于同一个集合"。集合是元素关系极为松散的一种结构
2)线性结构
线性结构的数据元素之间存在着一对一的关系
3)树形结构
树型结构的数据元素之间存在着一对多的关系
4)图形结构
图形结构的数据元素之间存在着多对多的关系,图形结构也称为网状结构
一个数据结构有两个要素:一个是数据元素的集合,另一个是关系的集合
5.数据的逻辑结构
数据的逻辑结构(Logical Stucture)是指数据结构中元素之间的逻辑关系,它是从具体问题中抽象出来的数学模型,是独立于计算机存储器的。数据的逻辑结构可分为四种基本类型:集合结构、线性结构、树形结构和图形结构。表和树是最常见的两种高效数据结构,许多高效的算法可以用这两种数据结构来设计实现。表是线性结构(一对一)、树(一对多关系)和图(多对多关系)是非线性结构。
6.数据的存储结构
数据的存储结构(Storage Stucture)是数据的逻辑结构在计算机内存中的存储方式,又称为物理结构。数据的存储结构的实现要用计算机编程语言来实现。因而依赖于具体的计算机语言。常用的存储方法可分为顺序存储和链式存储两种。
顺序存储方法,是对逻辑上相邻的元素存储在物理位置相邻的存储单元中,由此得到的存储方式称为顺序存储结构。
链式存储方法,是对逻辑上相邻的元素不要求其物理位置相邻,元素间的逻辑关系通过附设的指针字段来表示,由此得到的存储方式称为链式存储结构。
索引存储方法,是在数据文件的基础上增加一个索引文件,通过索引表建立索引,这样可以将一个顺序表分成几个顺序子表,其目的是在查询时提高查询效率,避免盲目查找。
散列存储方法,是通过元素于存储地址之间建立某种映射关系,使每个元素与每个存储地址之间尽量达到一对一的关系。
7.数据处理
数据处理是指对数据进行查找、插入、删除、合并、排序、统计以及简单计算等的操作过程。
8.数据类型
数据类型(Data Type)是与数据结构密切相关的一个概念,在用高级程序设计语言编写的程序中,每个变量、常量或表达式都对应一个确定的数据类型。数据类型可分为两类:一类是非结构的原子类型,如基本数据类型(整型、实型、字符型等);另一类是结构类型,可由多个结构类型组成,并可以分解。结构类型的分解可以是结构的,也可以是非结构的。
算法的概念及其特性
算法的定义
算法(Algorithm)是指在解决问题时,按照某种机械步骤一定可以得到问题的结果(有解时给出问题的解,无解时给出无解的结论)的处理过程。当面临某个问题时,需要找到用计算机解决这个问题的方法和步骤,算法就是解决这个问题的方法和步骤的描述。
算法的三要素
算法由操作、控制结构、数据结构三要素组成
操作:算术运算(加、减、乘、除),关系比较(大于、小于、等于、不等于),逻辑运算(与、或、非),数据传输(输入、输出、赋值)
控制结构:顺序结构(各操作是依次进行的),选择结构(由条件是否成立来决定选择执行),循环结构(也称为重复或迭代,有些操作要重复执行,直到满足某个条件时才结束,)
数据结构:算法操作的对象是数据,数据间的逻辑关系,数据的存储方式及处理方式就是数据结构
算法的基本性质
算法的表示满足以下性质:
目的性:算法有明确的目的,算法能完成赋予它的功能
分步性:算法为完成其复杂的功能,由一系列计算机可执行的步骤组成
有序性:算法的步骤是有序的,不可随意改变算法步骤的执行顺序
有限性:算法是有限的执行序列,算法包含的步骤是有限的
操作性:有意义的算法总是对某些对象进行操作,使其改变状态,完成其功能
算法的基本特征
有穷性:一个算法在执行有穷步骤之后必须结束
确定性:任何条件下,算法都只有一条路径
可行性:操作都可以通过已经实现的基本操作经过有限次运算实现
零个或多个输入:输入量需要在算法执行过程中输入或者输入嵌入到算法中
一个或多个输出:算法进行信息加工得到的结果
算法设计的要求
正确性:对于一切合法的输入数据都能得出满足要求的结果
可读性:算法首先是为了人的阅读和交流,其次才是让计算机执行
稳健性:输入数据非法时,算法应当恰当地做出反应或进行相应处理,而不是产生莫名其妙的输出结果
高效率与低存储量:算法执行时间和执行过程中所需的最大存储空间