严蔚敏
1. 什么是数据结构
如果要写好一个程序,必须分析待处理的对象的特性和对象之间的关系,这是“数据结构”形成和发展的背景。
“数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科”。
2. 基本概念和术语:
(1) 数据(data):在CS中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
(2)数据元素(data element):是数据的基本单位,在计算机中通常作为整体考虑。
(3)数据项(data item):一个数据元素的最小单位,关系类似进程和线程。数据项不可分。
(4)数据对象(data object):性质相同的数据元素的集合,是数据的一个子集。
(5)数据结构:互相之间存在一种或多种特定关系的数据元素的集合。通常有四类基本结构:集合、线性结构、树形结构。图状结构或网状结构。
数据结构的数学定义:
, D是数据元素的有限集,S是D上关系的有限集。
数学定义是将关系从文字抽象成为数学模型。在CS中,因为我们还要应用在程序上,所以需要思考数据结构在计算机中的表示(又称映像),其被称为数据的物理结构或存储结构。它包括数据元素的表示和关系的表示。
(6)数据节点:用若干位组合形成的位串表示一个数据元素,通常这个位串为元素或结点(node)。元素或结点可以看成是数据元素在计算机中的映像。
(7)数据域(data field):当数据元素由若干数据项组成时,位串中对应于各个数据项的子位串称为数据域。
(8)顺序映像/非顺序映像:数据元素之间的关系在计算机中有两种不同的表示方法:顺序和非顺序映像。因此会得到两种不同的存储结构:顺序存储结构和链式存储结构。
如下图所示,表示复数z1=3.0-2.3j和z2=-0.7+4.8j。左边顺序结构很好理解,就是通过位置表示数据结构。高级程序语言中的一维数组就可以来描述顺序存储结构。
右边是链式存储:非顺序映像的特点是借助指示元素存储地址的指针表示数据元素之间的逻辑关系。其中实部与虚部的关系用“0415”,“0611”和“0613”表示。可以看到这样很节省空间了。数据的逻辑结构和物理结构是密切相关的,直接影响了算法的实现。C的指针就是链式存储。
(9)数据类型:高级程序语言中的数据类型可分为两类:非结构的源自类型和结构类型。
(10)抽象数据类型(abstract data type, ADT):是指一个数学模型以及定义在该模型上的一组操作。只要数学特性不变,都不影响外部使用。和数据类型的关系就像是java的string 对象和 object对象。
抽象数据类型可用以下三元组表示:
(D,S,P)
其中,D是数据对象,S是D上的关系集,P是对D的基本操作集。本书定义:
ADT 抽象数据类型名{
数据对象:(数据对象的定义)
数据关系:(数据关系的定义)
基本操作:(基本操作的定义)
}ADT 抽象数据类型名
其中,数据对象和数据关系的定义用伪代码描述:
赋值参数只为操作提供输入值;引用参数以&打头。
(11)多型数据类型(polymorphic data type):值的成分不确定的数据类型(但是要能进行关系运算)。
相关阅读
图(Graph)——非线性数据结构,现实的图结构模型有通信网络,交通网络,人际关系网络等,图结构的组织形式比树结构更为复杂,因此,图结构对存
前言 数据结构:是指相互之间存在一种或多种特定关系的数据元素的集合用计算机存储、组织数据的方式。数据结构分别为逻辑结构、(存
1.二叉树 1.1 简述 二叉树(binary tree)是一棵树,其中每个节点都不能有多于两个的儿子 左图显示一棵由一个根和两棵子树组成的二
写在前面 第1章 数据结构绪论 第2章 算法 第3章 线性表 第4章 栈与队列 第5章 串 第6章 树 第7章 图 第8章 查找 第9章 排序
给定一个字符串,其中的字符只包含三种括号:花括号{ }、中括号[ ]、圆括号( ),即它仅由 “( ) [ ] { }” 这六个字符组成。设计算法,判