《数据结构与算法 C语言版》—— 1.2数据结构的发展概况

1.3基本概念与术语

计算机科学是研究信息表示和处理的科学,信息在计算机内是用数据表示的。直观地说,数据是用于描述客观事物的数值、字符以及一切可以输入到计算机中并由计算机程序加以处理的符号的集合,是计算机操作的对象的总称。
数据元素是数据的基本单位,它是数据中的一个“个体”,如整数“5”、字符“N”等。有时,一个数据元素可由若干数据项组成,例如,描述一个学生的信息为一个数据元素,学生信息中的每一项(如姓名、学号等)为一个数据项。数据项是数据的不可分割的最小单位。
数据对象是具有相同性质的数据元素的集合,是数据的一个子集。数据元素是数据对象的实例。例如,整数数据对象是集合{0,±1,±2,±3,…}。
数据结构是指相互之间存在一种或多种关系的特性相同的数据元素的集合。根据数据元素之间关系的不同,数据通常有以下四类基本的结构。
1)集合结构:在集合结构中,数据元素之间的关系是“属于同一个集合”。集合是元素关系极为松散的一种结构。
2)线性结构:该结构中的数据元素之间存在着一对一的关系。
3)树形结构:该结构中的数据元素之间存在着一对多的关系。
4)图形结构:该结构中的数据元素之间存在着多对多的关系。由于集合结构是数据元素之间关系极为松散的一种结构,因此也可用其他结构来表示它。图13为上述四类基本结构的关系图。

由数据结构的概念可知,数据结构有三个要素:一是数据元素的集合,二是数据元素之间关系的集合,三是定义在其上的操作。在形式上,数据结构可定义为一个二元组:

Data_Structures=(D,S)

其中:D是数据元素的有限集,S是D上关系的有限集。
数据结构包括数据的逻辑结构和物理结构。数据的逻辑结构是对数据元素之间的逻辑关系的描述,它可以用一个数据元素的集合和定义在此集合上的若干关系来表示,与数据的存储无关;数据的物理结构是逻辑结构在计算机中的表示和实现,故又称“存储结构”。
数据结构在计算机中的表示,包括数据元素的表示和关系的表示。在计算机中表示信息的最小单位是二进制的一位,叫做位(bit)。在计算机中,可以用由若干位组合起来的一个位串表示一个数据元素(如用一个字长的位串表示一个整数,用8位二进制数表示一个字符等)。
数据元素之间的关系在计算机中有四种不同的表示方法,下面分别介绍。
(1)顺序存储方法
该方法把逻辑上相邻的元素存储在物理位置上相邻的存储单元里,结点之间的逻辑关系由存储单元的邻接关系来体现。由此得到的存储表示称为顺序存储结构,该结构通常是借助于计算机程序设计语言(例如C、C++)的数组来描述的。
顺序存储方法的主要优点是节省存储空间,因为分配给数据的存储单元完全用于存放数据(不考虑C、C++语言中数组需指定最大存储空间大小的情况),结点之间的逻辑关系不占用额外的存储空间。采用这种方法,可实现对数据的随机存储。但顺序存储方法的主要缺点是不便于修改,对数据进行插入、删除操作时,可能要移动一系列数据。
(2)链式存储方法
该方法不要求逻辑上相邻的元素在物理位置上也相邻,元素之间的逻辑关系是由附加的指针字段表示的。由此得到的存储表示称为链式存储结构,该结构通常是借助于计算机程序设计语言(例如C、C++)的指针类型来描述的。
链式存储方法的主要优点是便于修改,在进行插入、删除操作时,仅需要修改指向相应数据元素的指针,而不必移动数据元素。但与顺序存储方法相比,其主要缺点是存储空间的利用率较低,因为分配给数据的存储单元有一部分用来存储数据元素之间的逻辑关系了。另外,由于逻辑上相邻的数据元素在存储空间上不一定相邻,所以不能对其进行随机存取。
(3)索引存储方法
该方法通常在存储数据元素的同时,还建立附加的索引表。索引表中的每一项称为索引项,索引项的一般形式是:(关键字,地址),关键字唯一标识一个数据元素,地址作为指向该数据元素的指针。这种带有索引表的存储结构可大大提高数据查找的速度。
线性结构中采用索引存储方法后,可对数据元素进行随机存取。在进行插入、删除操作时,只需移动存储在索引表中对应数据元素的存储地址,而不必移动数据元素本身,所以仍能保持较高的数据修改运算效率。索引存储方法的缺点是增加了索引表,降低了存储空间的利用率。
(4)哈希(或散列)存储方法
该方法的基本思想是根据数据元素的关键字,通过哈希函数直接计算出一个值,并将这个值作为该数据元素的存储地址。
哈希存储方法的优点是查找速度快,只要给出待查找数据元素的关键字,就可以立即计算出该数据元素的存储地址。但与前三种存储方法不同的是,哈希存储方法只存储数据元素,不存储数据元素之间的逻辑关系。哈希存储方法一般只适合要求对数据进行快速查找和插入的场合。
上述四种存储方法既可以单独使用,也可以组合起来使用。

时间: 2024-12-17 22:15:10

《数据结构与算法 C语言版》—— 1.2数据结构的发展概况的相关文章

《数据结构与算法 C语言版》—— 3.8习题

前言 "数据结构"是计算机程序设计的重要理论技术基础,是计算机学科的核心课程,也是计算机专业考研的必考课程,同时已成为其他理工科专业的热门课程.学好该课程,不仅对学习后续算法设计.数值分析.操作系统.编译原理等课程有很大帮助,而且在实际中有广泛的用途. 数据结构主要研究数据的各种组织形式以及建立在这些结构之上的各种运算的实现.它不仅为用计算机语言进行程序设计提供了方法性的理论指导,还在一个更高的层次上总结了程序设计的常用方法和常用技巧. "数据结构"课程的特点是概念

《数据结构与算法 C语言版》—— 3.1栈

3.1栈 3.1.1栈的抽象数据类型定义 栈(stack)是限定仅在表尾进行插入或删除操作的线性表.表尾端称为栈顶,表头端称为栈底.不含元素的栈称为空栈.由于后进栈的元素先出栈,所以栈又称为后进先出(Last In First Out,LIFO)的线性表. 在日常生活中,有很多后进先出的例子.例如,铁路调度站火车的进出是后进先出,人们脱衣服是后穿先脱等.在程序设计中,也常用栈这样的数据结构,实现与保存数据相反的顺序来使用这些数据. 栈的操作有栈的初始化.判空.进栈.出栈及取栈顶元素等.下面给出栈

《数据结构与算法 C语言版》—— 1.1数据结构的研究对象

1.1数据结构的研究对象 自然界中的许多问题是可以用数学工具进行描述的.例如,造桥中的受力问题可描述为线性方程,人口增长的情况可描述为微分方程.但更多的非数值计算问题无法用数学方程加以描述.因此,解决这类问题的关键不再是数学分析和计算方法,而是要设计出合适的数据结构,才能有效地解决问题.请看以下列举的具体问题.例1学生信息检索系统.当我们需要查找某个学生的有关信息或某个专业的情况时,只要建立了相应的数据结构,按照某种算法编写了程序,就可以实现计算机自动检索.由此,可以在学生信息检索系统中建立一个

《数据结构与算法 C语言版》—— 1.4数据类型与抽象数据类型

1.4数据类型与抽象数据类型 1.4.1数据类型 数据类型是和数据结构密切相关的一个概念,它最早出现在高级程序语言中,用以刻画(程序)操作对象的特性.在用高级程序语言编写的程序中,每个变量.常量或表达式都有一个它所属的确定的数据类型.类型显式或隐含地规定了在程序执行期间变量或表达式所有可能的取值范围,以及在这些值上允许进行的操作.因此,数据类型是一个值的集合和定义在此集合上的一组操作的总称.例如,C语言中的整型变量,其值为某个区间上的整数(依赖于机器),定义在其上的操作为加.减.乘.除和取模等算

《数据结构与算法 C语言版》—— 1.5算法与算法分析

1.5算法与算法分析 算法与程序设计和数据结构密切相关.简单地说,算法是解决问题的策略.规则.方法.算法的具体描述形式很多,但计算机程序是对算法的一种精确描述,而且可在计算机上运行.数据结构的操作的实现方法就是一个算法问题,但该问题是针对数据结构的,是在给定的数据结构上进行的.下面从算法的特性.算法描述.算法性能分析与度量等方面对算法进行介绍. 1.5.1算法 算法(algorithm)是对特定问题求解步骤的一种描述,是指令的有限序列.其中,每个指令表示一个或多个操作.一个算法必须满足以下五个重

《数据结构与算法 C语言版》—— 1.8小结

1.8小结 本章介绍了数据结构的研究对象.基本概念与术语.数据类型和抽象数据类型,以及算法.算法的设计原则.算法效率的衡量方法等.主要内容如下.(1)数据结构的研究对象数据结构是一门讨论"描述现实世界实体的数学模型(非数值计算)及其上的操作在计算机中如何表示和实现"的学科.数据结构的内容包括3个"层次"的5个"要素",如表13所示.(2)基本概念与术语简单地说,数据就是计算机操作的对象的总称.数据元素是数据的基本单位,它是数据中的一个"

《数据结构与算法 C语言版》—— 2.6小结

2.6小结 线性表是整个数据结构课程的重要基础,本章的主要内容如下.一个线性表是由n个数据元素构成的有限序列,其特点是数据元素之间存在着线性关系.在计算机中表示这种关系的两种不同的存储结构是顺序存储结构(顺序表)和链式存储结构(链表).1顺序表顺序表是在内存中用一组地址连续的存储单元依次存储线性表的数据元素,借助数组来实现.顺序表中数据元素之间的逻辑关系通过其"存储位置相邻"来表示.对于顺序表,主要有初始化.建立.销毁.插入.删除.按值查找等基本操作.插入和删除操作约需移动一半的元素

《数据结构与算法 C语言版》—— 2.3线性表的链式表示与实现

2.3线性表的链式表示与实现 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单.直观的公式来表示.然而,从另一方面来看,这个特点也造成了这种存储结构的弱点:在作插入或删除操作时,需移动大量元素.本节我们将讨论线性表的另一种表示方法--链式存储结构,其特点是用一组地址任意的存储单元存储线性表中的数据元素.由于它不要求逻辑上相邻的元素在物理位置上也相邻,因此它没有顺序存储结构所具有的弱点,但同时也失去了顺序表随机存取的特点

《数据结构与算法 C语言版》—— 3.3栈与递归实现

3.3栈与递归实现 3.3.1递归的定义 栈还有一个重要应用是在程序设计语言中实现递归.一个直接调用自己或通过一系列的调用语句间接调用自己的函数,称为递归函数.其中直接调用自己的函数称为直接递归.间接调用自己的函数称为间接递归. 递归是算法设计中最重要的手段.它通常把一个大型的复杂问题转化为一个与原问题相似的规模较小的问题来求解.下面是常见的使用递归的三种情况. (1)定义是递归的 现实中,有许多定义是递归定义的,以n!为例来说明,其定义如下: fact(n)=1n=0//递归终止条件 n*fa