数据结构的基本概念
基本概念和术语
数据:信息的载体。是描述事物属性,性质的数、字符以及所有能够输入到计算机中且能被处理的符号的大集合。
数据元素:数据的基本单位,通常作为一个整体考虑(可再分)。一个数据元素由多个数据项组成。如: 学生记录=(姓名,年龄,…)
数据对象:具有相同性质的数据元素组成的集合。是数据的一个子集。
数据类型
- 原子结构 //不可再分
- 结构类型 //struct{}
- 抽象数据类型ADT //抽象数据组织以及相关操作
ADT的定义仅取决于模型中数据的逻辑关系。
-== 数据结构:相互之间存在一种或多种特定关系的数据元素的集合。
数据结构=逻辑结构+存储结构+数据的运算
算法的设计取决于选定的逻辑结构,而算法的实现依赖于物理结构。==
逻辑结构独立于物理结构,而物理结构依赖于逻辑结构。
逻辑结构
分为线性结构与非线性结构。
线性结构(1:1):数组、集合、线性表、队列、栈、串、广义表等。
非线性结构:树(1:N)、图(N:N)。
存储结构
又称物理结构。取决于计算机语言。如C语言中的数组a[],结构体等。
主要可分为以下几种物理结构:
顺序存储
以一整块相邻的物理块存储对应的逻辑块。
用物理相邻表明逻辑相邻
优点:可实现随机存取,存储密度大(=1)。
缺点:插入删除时需移动大量元素,且会有部分外部碎片。
链式存储
无需一整块相邻的物理块来存储,用指针来指向逻辑上后一位所在物理块
优点:插入删除数据很方便,无外部碎片。
缺点:存储密度低,无法实现随机存取,只能顺序存取。
索引存储
利用索引表来表明关键字所在地址。
优点:检索速度快。
缺点:需消耗额外空间存储索引表,且插入删除时需修改索引表。
散列存储
又称Hash存储,利用某种规则实现关键字到地址的映射(Hash表)。
优点:检索、插入、删除节点的速度都很快。
确定:处理冲突的方式若不好,很有可能会降低效率且增加时空开销。
算法
算法是解决问题步骤的一种描述,表示为指令的有限序列。算法满足以下五个特性:
有穷性:算法在有限的时间内能够结束,且每一步在有限时间内能够能够完成。
可行性:算法是实际可行的。
确定性:算法的每一步是确定的,无歧义。
输入
输出
好的算法
健壮性:输入非法数据时能够适当的做出反应或处理,而不是出现奇怪的结果。
可读性:帮助人们理解。
正确性:应当是正确的。
效率和低存储量需求:好的算法的效率应当尽可能的高,辅助空间大小尽可能的低。
五特性是任何算法都满足的,而四优点是评价算法好坏的标准。
VS程序
程序是算法在计算机上的特定实现。程序不一定满足有穷性,如死循环等。
算法不是程序,程序也不是算法。