数据结构是数据的组织形式,可以用来表征特定的对象数据。在计算机程序设计中,操作的对象是各式各样的数据,这些数据往往拥有不同的数据结构,例如数组、接口、类等。而算法和数据结构具有千丝万缕的联系,计算机科学家尼克劳斯·沃思(Nikiklaus Wirth)提出“数据结构+算法=程序”的著名公式。这是因为不同的数据结构所采用的处理方法不同,计算的复杂程度也不同,因此算法往往是依赖于某种数据结构的,即数据结构是算法实现的基础。
数据结构是计算机中对数据的一种存储和组织方式,同时也泛指相互之间存在一种或多种特定关系的数据的集合。数据结构是计算机艺术的一种体现,合理的数据结构能够提高算法的执行效率,还可以提高数据的存储效率。
数据结构是计算机程序设计的产物,其实,到现在为止,计算机技术领域中还没有一个统一的数据结构的定义。不同的专家往往对数据结构有不同的描述,以下就是几种典型的定义。
“数据结构是数据对象、存在于该对象的实例以及组成实例的元素之间的各种关系,并且这种关系可以通过定义相关的函数来给出。”这是Sartaj Sahni在其经典著作《数据结构、算法与应用》一书中提出的,他将数据对象定义为一个实例或值的集合。
“数据结构是抽象数据类型ADT的物理实现。”这是Clifford A.Shaffer在其《数据结构、算法与应用》一书中定义的。其中抽象数据类型ADT,英文全称Abstract Data Type,简称ADT。抽象数据类型ADT的概念我们将在后面讲到。
LobertL.Kruse也给出了数据结构设计过程的概念,他认为一个数据结构的设计过程可以分为抽象层、数据结构层和现实层。其中,抽象层是指抽象数据类型层,也就是ADT层,主要讨论数据的逻辑结构及其运算;数据结构层讨论一个数据结构的表示;实现层讨论一个数据结构在计算机内的存储细节以及运算的实现。
虽然业界没有一个统一的定义,但是这些定义都是具有相同的含义的。我们在这里只需要了解数据结构的基本定义,并能够使用其解决问题即可。我们可以这样简单地理解数据结构,一个数据结构是由数据元素依据某种逻辑联系组织起来的,对数据元素间逻辑关系的描述称为数据的逻辑结构。由于数据必须在计算机内存储,数据的存储结构是其计算机内的表示,也就是数据结构的实现形式。另外,讨论一个数据结构,必须涉及该类数据上执行的运算。
数据结构是一切算法的基础,而且不仅如此,数据结构可以说是程序设计语言的基础。正是由于对数据结构的深入理解,才导致多种多样的程序设计语言的诞生,例如Java、C++、C#等。其中,面向对象的程序设计语言就是完善处理对象类型数据结构的范例,这在某些方面可以方便地描述和解决实际问题。
数据结构中的基本概念
深入了解数据结构之前,我们需要简单掌握一下数据结构中涉及的一些基本概念,主要包括如下几个:
■数据(Data):数据是信息的载体,其能够被计算机识别、存储和加工处理,是计算机程序加工的“原材料”。数据包括的类型是非常广的,例如基本的整形、字符、字符串、实数等,此外,图像和声音等也都可以认为是一种数据。
■数据元素(Data Element):数据元素是数据的基本单位,其也称元素、结点、顶点、记录等。一般来说,一个数据元素可以由若干个数据项组成,数据项是具有独立含义的最小标识单位。数据项也可称为字段、域、属性等。
■数据结构(Data Structure):数据结构指的是数据之间的相互关系,也就是数据的组织形式。
数据结构的内容
数据结构包括三个方面的内容,数据的逻辑结构、数据的存储结构和数据的运算。下面就将分析这三个方面的内容。
■数据的逻辑结构(Logical Structure):也就是数据元素(Data Element)之间的逻辑关系。数据的逻辑结构是从逻辑关系上描述数据结构的,与数据在计算机中是如何存储无关的,也就是独立于计算机的抽象概念。从数学分析的角度来看,数据的逻辑结构可以看做是从具体问题抽象出来的数学模型。
■数据的存储结构(Storage Structure):也就是数据元素(Data Element)及其逻辑关系在计算机存储器中的表示形式。数据的存储结构依赖于计算机语言,是逻辑结构用于计算机语言的实现。一般来说,只有在高级语言的层次上才会讨论存储结构,在低级的机器语言中,存储结构的具体的。
■数据的运算:也就是能够对数据施加的操作。数据的运算其基础在于数据的逻辑结构上,每种逻辑结构都可以归纳一个运算的集合。在数据结构范畴内,最常用的运算包括检索、插入、删除、更新、排序等。
其实,数据的逻辑结构、数据的存储结构和数据的运算时一个整体,独立地去理解这三者中的任何一个人都是不全面的。这主要表现在如下几方面。
□同一个逻辑结构可以有不同的存储结构。
逻辑结构和存储结构是两个概念,同一个逻辑结构可以由不同的存储结构。例如,线性表是最简单的一种逻辑结构,如果线性表采用顺序方式存储,这种数据结构就是顺序表;如果线性表采用链式方式存储,这种数据结构就是链表;如果线性表采用散列方式存储,这种数据结构就是散列表。
□同一种逻辑结构也可以有不同的数据运算集合。
数据的运算是数据结构中十分重要的内容。一个相同的数据逻辑结构和存储结构,而采用不同的运算集合及运算性质,将导致全新的数据结构。例如线性表,如果将线性表的插入运算限制在表的一段,而删除操作限制在表的另一端,那么这种数据结构就是队列;如果将线性表的插入和删除操作都限制在表的同一段,那么这种数据结构就是栈。
数据结构中的这三方面是一个有机的整体,缺一不可。数据的逻辑结构、数据的存储结构和数据的运算任何一个发生变化都将导致一个全新的数据结构出现。
【转载使用,请注明出处:http://blog.csdn.net/mahoking】
【转载使用,请注明出处:http://blog.csdn.net/mahoking】