数据结构是指数据在计算机系统中的组织和存储方式。数据是能够带给我们信息的数值、文字、图像、视频、符号等内容,数据按照一定的结构组织在一起称为数据的逻辑结构,数据的逻辑结构以何种方式存储到物理空间称为数据的存储结构,数据的逻辑结构和存储结构统称为数据结构。
为了更好地理解数据结构,下面我们来看几个例子。
例1:使用计算机管理学生信息问题。学生信息包括学号、姓名、籍贯、年龄、年级、班级等数据字段,计算机要能够存储这些数据,并能对这些数据进行增加、删除、修改和查询操作。在计算机中如何组织和存储这些数据呢?既能方便操作,又能节省存储空间,最简单的方式就是将学生信息设计为表结构(见图1-1),每一个学生的信息为表中的一条记录,记录中的单个数据项为学生的数据字段,学生的学号和姓名为关键数据字段。用户可以通过学号或姓名查找某一学生的信息,也可以添加、删除或修改学生的信息。这些操作都是针对表的操作,从而将计算机管理学生信息问题转化为表和对表的增、删、改、查运算。
图1-1学生信息表
例2:使用计算机辅助决策贷款申请问题。用于贷款申请辅助决策主要判断申请者的Age(年龄)、HasJob(是否有工作)、OwnHouse(是否有房产)、CreditRating(信贷评级)。Age可能的取值为:young、middle、old;OwnHouse和HasJob可能的取值为:true和false;CreditRating可能的取值为fair、good、excellent。决策过程从Age开始,根据申请者的年龄构成三个不同的决策分支,每个决策分支可以分别根据HasJob、OwnHouse、CreditRating的值进行后续决策,直至决策完成,这样就构成了一棵决策树,从而将计算机辅助决策贷款申请问题转换为决策树模型,以及对决策树模型的查询操作。
图1-2贷款申请辅助决策树模型
以图1-2贷款申请辅助决策树模型为例,决策程序首先判断申请者的年龄,根据年龄值选择不同的分支,若年龄值为young,再判断申请者是否有工作:若HasJob值为Fasle,再判断申请者是否有住房,若有住房申请通过,否则申请失败;若HasJob值为True,则申请通过。
例3:使用计算机解决推销员最短行程问题。推销员需要访问某地区的所有城镇推销商品,最后回到出发点,计算机如何安排推销员的推广路线使总行程最小。若用顶点表示城镇,边表示连接两城镇的路,边上的权重表示距离,于是推销员问题就转化为在加权图中寻找一条经过每个顶点至少一次的最短闭通路问题(见图1-3)。
图1-3某地区城镇加权连通图
图1-3中顶点v1、v2、v3表示三个城镇,顶点之间的边线表示连通城镇之间的交通,边线的权重表示距离。可以判断经过每个顶点至少一次的最短闭通路为:
(V1,V2,v1,V3)
即V1到V2,V2返回到V1,再由V1到V3,边线的权重和为4。
前面的三个案例,程序处理的不再是纯数值数据,而是表、树、图结构化的数据,数据结构就是研究类似表、树、图这样的结构化数据在计算机的存储和运算。
现代计算机的应用领域已不再局限于科学计算,更多地应用于控制、管理等非数值处理领域,计算机处理的数据也由数值发展到字符、表格、图形、图像、视频、声音等具有一定结构的数据,运行在计算机上的程序需要对这些非数值数据进行存储和运算,由此诞生了数据结构技术。
年唐纳德克努思教授在《计算机程序设计艺术》一书中,首次提出了算法及数据结构的概念。70年代初,数据结构作为一门独立的课程开始进入大学课堂,采用的教学语言有Pascal、Java、C、C++等编程语言。
《数据结构》在计算机科学中是一门综合性的专业基础课,它主要研究非数值性程序设计中数据的物理存储和逻辑结构,以及它们之间的关系和运算。它是一般程序设计的基础,也是操作系统、编译程序、数据库系统及其它大型应用程序的设计基础。