datastructure什么意思(数据结构的基本概念)

时间:2024-12-02 11:34:28

数据结构的概念是由美国计算机科学家克努特(Donald Knuth)在20世纪60年代提出的。克努特是计算机科学领域的重要人物之一,他在算法分析和设计、数据结构以及计算机排版等领域做出了杰出贡献。他的著作《计算机程序设计艺术》被广泛认为是计算机科学经典之作,其中详细介绍了数据结构的概念和应用。克努特的贡献使得数据结构成为计算机科学中的重要研究领域,并对后来的学者和工程师产生了深远影响。

1.1 数据结构在程序中的作用

考虑几个简单化后的应用:

1. 学籍管理系统:实现学生的入学、毕业、注册等功能

2. 车辆管理系统:实现车辆的登记、注销、查询等功能

3. 银行卡管理:实现开户、销户、查询等功能

可以为上述应用采用三层结构的模式,设计出图1.1的程序结构。

图1.1 简单化的三个应用程序层次结构图

观察上述三个不同系统,虽然它们的行业差异极大、业务逻辑也存在区别,但在数据的存储及访问上,有着相似的特性:以数组来存储、在此数组上实现增删改查操作。因此,可以提取出一种统一的程序结构:

图1.2 一种统一的程序结构(此处用数组组织,仅仅是为了理解上的简单。除数组外,后续会介绍其它多种形式)

在上述结构中,不同的应用有着差异化的界面/菜单、存在着不同的行业规则,但在访问层上,除了业务对象类型不同外,其余的数据组织和操作是相同的。因此,只要有着统一的访问层,即可设计一个访问层程序库,为不同的应用提供操作。我们在开发不同的应用系统时,只需要专注于界面的设计以及业务规则的实现即可,极大简化了程序开发的任务、提升了程序开发的效率。

在数据结构课程设计中,建议大家采用上述的三层结构,来编程实现相应的题目。

1.2 数据结构的概念

从狭义上来看,数据结构的研究对象就是上图访问层中的数据组织形式以及所进行的操作。关于数据结构的定义,不同研究者会给出相异的文字描述。根据ChatGpt,数据结构是指在计算机科学中,用来组织和存储数据的一种特定方式。它定义了数据元素之间的关系,以及(在这些关系上)对这些数据元素进行操作的方法和规则

具体来说,数据结构(Data Structure)包括以下几个方面的内容:

1. 数据元素:数据结构中的最基本单元,可以是一个单独的数据项或一组相关的数据项。

2. 关系:数据元素之间的关联关系,可以是线性的、非线性的、层次的等不同类型的关系。

3. 存储方式:数据结构在计算机内部的存储方式,可以是连续存储(如数组)或链式存储(如链表)等。

4. 操作:对数据结构中的数据元素进行的操作,包括插入、删除、查找、排序等。

数据结构的设计和选择对于解决特定问题非常重要。不同的数据结构适用于不同的应用场景,例如数组适用于随机访问,链表适用于插入和删除操作频繁的场景。通过选择合适的数据结构,我们可以提高程序的效率和性能。

关于上述的几个概念,可以进一步展开。

1.3 数据的相关概念

1. 数据:数据是指描述事物特征的符号集合,是客观世界在计算机中的映像。它可以是数字、文字、图像、声音等形式。数据是计算机科学中的基本概念,是计算机程序的输入和输出。

2. 数据对象:数据对象是指具有相同性质的数据元素的集合。它是数据的逻辑单位,可以是一个实体、一个事件或一个抽象概念。数据对象可以是一个单独的数据元素,也可以是一组相关的数据元素。

3. 数据元素:数据元素是数据对象中的一个成员。它是数据的最小单位,具有独立的含义和属性。数据元素可以是一个整数、一个字符、一个结构体等。

4. 数据项:数据项是数据元素中的一个基本单位。它是数据元素的最小组成部分,通常表示一个属性或特征。例如,在一个学生数据元素中,姓名、年龄、性别等可以作为数据项。

这些定义描述了数据及其组织层次的不同方面。数据是描述事物的符号集合,数据对象是具有相同性质的数据元素的集合,数据元素是数据对象中的一个成员,而数据项是数据元素的基本单位。理解这些概念有助于我们更好地理解和处理数据结构中的数据。图1.3是这些概念的一个简单示意图。

图1.3 数据项、数据元素、数据对象、数据的关系

1.4 数据元素的关系

数据结构(Data Structure)中的结构(Structure),指的是数据元素之间的关系。数据结构可以从逻辑结构与物理结构2个方面进行描述。

图1.4 数据结构的分类

逻辑结构指的是数据元素之间在业务/逻辑/规则上的关系。普遍认为,数据元素之间存在着4种逻辑关系(结构):

图1.5 数据结构中四种基本的关系(src:https://blog.csdn.net/qq_42761395/article/details/104253724)

线性结构:数据元素之间存在一对一的关系。相邻的2个节点(数据元素)可以称为前驱与后继。

树结构:一对多的关系。上下的2个节点可以称为双亲与孩子。

图结构:多对多的关系。相邻的2个节点互称为邻接点。

离散结构:数据元素之间没有关系。

同一个数据对象,根据业务的不同,可以选用不同的结构进行处理。例如,在学籍系统中,需要按学号从小到大排列时,可以采用线性结构,节点(数据元素)对应于学籍,关系则对应于学号之间的大小关系。

应用数据结构知识的要点之一,在应用中正确的识别出节点与关系,从而把应用问题映射为数据结构的操作问题。例如,五岔路口的交通信号灯控制,可以把每一个通路的红绿灯表示为节点,把通路之间的冲突表示为节点之间的关系(见图1.5),则可采用图的染色算法解决五岔路口的红绿灯控制问题。

图1.5 五岔路口红绿灯的图结构(src: https://blog.csdn.net/u013599298/article/details/55047496)

物理结构则指的是数据元素在计算机中存储上的关系,一般分为顺序存储结构和链式存储结构。

1.5 数据结构中的操作

主要涉及在特定结构上,数据元素和相应关系的增加、删除、修改、查找等操作,以及元素之间的排序等,还有初始化、销毁等补充操作。

至此,数据结构也可以形式化表示为一个三元组:

数据结构 = <数据对象,关系,操作>

可以看出,数据结构的学习要求,是能够掌握在4种逻辑结构与2种物理结构的组合中,实现数据的增删改查等操作

1.6 抽象数据类型

在上述的形式化三元组中,数据对象与具体应用息息相关,而关系与操作则是所有应用可以通用的。为了便于研究数据结构,我们不设定/不关心数据对象的具体属性,即不去描述数据对象的数据类型(例如,不关心包括哪些属性字段以及各个属性的数据类型),而是用一个抽象的类型统一表示,由此,有了抽象数据类型(Abstract Data Type,ADT)的概念。

抽象数据类型(ADT)是一种数学模型,它定义了一组数据对象以及定义在这些对象上的操作。ADT将数据的表示和操作与其实现细节相分离,使得用户可以通过操作接口来使用数据,而不需要关心底层的实现细节。它的一般定义形式是:

图1.6 抽象数据类型的表示(src: https://blog.csdn.net/rainchxy/article/details/77854341 )

在介绍数据结构的理论时,各种数据结构都可假定为抽象数据类型。而在编程解决具体应用问题时,需要把抽象数据类型具化为现实业务数据类型。