数据结构(高级计算机程序设计的理论指导)
数据结构:
学习数据结构是为了在后续编程中应用数据工具,如果后期数据工具有缺陷,我们也可以工具进行改造(自定义数据结构)本次学习主要关于Java的数据结构,可以说数据结构是编程最重要的基本功没有之一。数据结构是基础。
线性表、栈、队列、(字符)串、数组、广义表、树、二叉树、图
对于每种数据结构会讲解其添加、更新、删除、查询、排序等操作的实现
数据结构与算法不可分
查询、排序一般单独拿出来讲解
数据(Data):
描述客观事物的数值、字符以及能输入机器且能够被处理的各种符号集合
数据的含义非常之广范,除了通常的数值数据、字符、字符串以外,声音、图像等一切可以输入计算机并能被处理的都是数据
数据项(Data item):
最小数据单位(不可分割——具有原子性)
数据元素(Data element):
数据的基本单位,是数据集合的个体,通常有若干个数据项组成,在计算程序中通常作为一个整体来进行处理
数据对象(Data object):
是性质相同的数据元素的集合,是数据的子集
数据结构(Date structure):
是数据相互之间存在一种或多种特定关系的数据元素的集合
是组织并存储数据以便有效使用的一种专门格式
用来反映一个数据的内部构成,也就是一个数据有哪些成分
数据结构、以什么方式构成、是什么结构
表示一组数据元素及其相互关系的数据结构有两种不同的表现形式
数据结构=逻辑结构+存储结构
数据结构=逻辑结构+存储结构+运算/操作(在存储结构上)
表现形式:
1、数据结构的逻辑结构:数据结构的逻辑层面,指数据元素之间的逻辑关系(和现实无关)
分类方式1:
线性结构:线性表(典型的线性数据结构)、栈、队列、串及数组
定义:有且只有一个开始节点和一个终端节点,所有的节点最多只有一个直接前驱和一个直接后驱
特点:1、集合中必存在唯一的一个“第一元素”
2、集合中必存在唯一的一个“最后的元素”
3、除最后元素外,其他元素均有唯一的“后继”
4、除第一个元素外,其他元素均有唯一的“前驱”
非线性结构:树形结构、图形结构
定义:一个结点元素可能对应多个直接前驱和多个直接后驱
分类方式2:
1、集合结构
a.确定性(集合中的元素是确定的)
b.唯一性(集合中的元素互不相同,例如A{1,a},a!=1)
c.无序性(集合中的元素没有先后之分,例如{3,4}{4,3}是同一个集合)
集合结构中元素之间的关系很弱,仅是存在于同一个集合,所以数据结构中不对该结构进行研究
2、线性结构
数据元素之间存在着“一对一”的数据结构
3、树状结构
除了第一个数据元素以外每个数据有且只有一个直接前驱元素,
但是可以有多个直接后驱元素,数据元素之间是“一对多”的数据结构
4、网络结构
每个数据元素可以有多个直接前驱元素,也可以有多个直接后驱元素,
特点是数据元素之间是多对多的联系
2、数据结构的存储结构:将数据存储与计算机世界的物理层面
1、顺序存储结构:(连续的存储空间)将逻辑上相邻的节点元素存储在物理位置上相邻的存储单元中,节点之间的逻辑关系由存储单元的邻接关系来体现,由此得到的存储结构是顺序存储结构,Java中可由数组来描述
优点:节省存储空间,因为分配给数据的存储单元全部用来存放节点
缺点:插入和删除操作时需要移动元素,效率较低
2、链式存储结构:(不连续的存储空间)数据存储是不连续的存储空间,每个存储节点对应一个需要存储的数据元素,每个节点由数据和指针组成,元素之间的逻辑关系通过存储节点之间的链接关系反应
特点:a.比顺序存储结构的存储密度小
b.逻辑上相邻的节点物理上不必相邻
c.插入、删除灵活
d.查找结点时比顺序存储慢
3、索引存储结构:建立索引节点信息,并建立附加的索引表来标识结点的地址
比如图书、字典的目录
特点:索引占用空间大,但是性能高(索引可以分为很多级)
4、散列存储结构:根据节点的关键字直接计算当前节点的存储地址
特点:a.添加、查询速度极快
b.主体是数组,再引出相关的链表
同一逻辑结构可以对应多种存储结构
同样的运算,在不同的存储结构中,其实现过程是不同的