数据结构的基本概念
数据结构是一门研究非数值计算的程序设计中计算机的操作对象以及它们之间的关系和操作的学科。
数据:能输入计算机且能被计算机处理的各种符号的集合。
数据型数据:整数、实数等;
非数据型数据:文字、图像、图形、声音等;
数据元素:是数据的基本单位,通常作为一个整体进行考虑和处理。也简称元素、结点、顶点。
数据项:构成数据元素不可分割的最小单位。
(数据>数据元素>数据项)
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
逻辑结构:数据元素之间的逻辑关系。
划分方式一:
线性结构:有且仅有一个开端和一个终端结点,并且所有结点都最多只有一个直接前驱和一个直接后继。例如:线性表、栈、队列、串。
非线性结构:一个结点可能有多个直接前去和直接后继。例如:树、图。
划分方式二:
集合结构:同属一个集合外无其他关系。
线性结构:数据元素之间存在一对一的关系。
树形结构:数据元素之间存在一对多的关系。
图状结构(网状结构):数据元素之间存在着多对多的关系。
物理结构(存储结构):数据元素及其关系在计算机内存中的表示(又称为映像)。
顺序存储结构:用一组连续的存储单元依次存储数据元素。
链式存储结构:用一组任意的存储单元存储数据元素。数据元素之间的逻辑关系用指针来表示。
索引存储结构:在存储结点信息的同时,还建立索引表。
散列存储结构:根据结点的关键字(key)直接计算出该结点的存储地址。
数据的运算和实现:可以施加的操作和在物理结构上的实现。
数据类型和抽象数据类型
定义数据类型是为了规定数据的取值范围和操作。
例如:在C语言中,数据类型分为基本数据类型(int、float、double等)、构造数据类型(数组、结构、共用体、枚举等)、指针、空或者用typeof自己定义。
抽象数据类型:一个数学模型以及定义在此数据模型上的一组操作。可以用三元组(D,S,P)表示:D是数据对象、S是D上的关系集、P是D的基本操作集。
//三元组伪代码定义
ADT Circle{
D={r,x,y|r,x,y均为实数}
S={<r,x,y>|r是半径,<x,y>是圆心坐标}
P=Circle(&C,r,x,y)
//求面积
double Area(C)
//求周长
double Circumference(C)
...
}ADT Circle
//实际定义一个复数
typedef struct{
float realpart; //实部
float imagpart; //虚部
}Complex