数据结构的基本概念
数据:所有能输入到计算机中并能被计算机程序识别和处理的符号集合。
数值数据:整数、实数等
非数值数据:图形、图象、声音、文字等
数据元素:数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据项:构成数据元素的不可分割的最小单位。
数据结构:相互之间存在一定关系的数据元素的集合。按照视点的不同,数据结构分为逻辑结构和存储结构。
数据、数据元素、数据项之间的关系
包含关系:数据由数据元素组成,数据元素由数据项组成。数据元素是讨论数据结构时涉及的最小数据单位,其中的数据项一般不予考虑。
逻辑结构:指数据元素之间逻辑关系的整体。数据元素的关系(逻辑结构)可分为四类:集合,线性结构,非线性结构(树形结构,图状或网状结构)。数据的逻辑结构是从具体问题抽象出来的数据模型。数据的逻辑结构在形式上可定义为一个二元组:Data_Structure = (D, R)
其中D是数据元素的有限集合,R是D上关系的集合。R可以用次序对集合表示。
存储结构:又称为物理结构,是数据及其逻辑结构在计算机中的表示。存储结构实质上是内存分配,在具体实现时依赖于计算机语言。数据的存储结构又称数据的物理结构------逻辑结构在存储器中的表示(又称映像)
数据的存储结构依赖于计算机语言
顺序存储表示
链接存储表示
索引存储表示
散列存储表示
1 顺序存储结构:
以存储位置的相邻表示后继关系(y的存储位置和x的存储位置之间是一个常量C)而C是一个隐含值,整个存储结构中只含数据元素本身的信息。
2 链式存储结构:
以附加信息(指针)表示后继关系。需用一个和x在一起的附加信息指示y的存储位置
逻辑结构和存储结构之间的关系数据的逻辑结构属于用户视图,是面向问题的,反映了数据内部的构成方式;数据的存储结构属于具体实现的视图,是面向计算机的。一种数据的逻辑结构可以用多种存储结构来存储,而采用不同的存储结构,其数据处理的效率往往是不同的。
抽象数据类型
1.数据类型(Data Type):一组值的集合以及定义于这个值集上的一组操作的总称。(有原子类型和构造类型),例如:C++中的整型变量 。所以,在某种意义上,数据类型可以看成由一种数据结构和定义在其上的一组操作的总称。
2. 抽象数据类型(Abstract Data Type,ADT):一个数据结构以及定义在该结构上的一组操作接口的总称。其定义取决于它的一组逻辑特性, 而与其在计算机内如何表示和实现无关。 以后我们用抽象数据类型来描述数据结构.
ADT有两个重要特征
1.数据抽象:用ADT描述程序处理的实体时,强调的是其本质的特征,其所能完成的功能及它和外部用户的接口(即外界使用它的方法)。
2.数据封装:将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节。
线性表的定义
线性表:简称表,是n(n≥0)个具有相同类型的数据元素的有限序列。
线性表的长度:线性表中数据元素的个数。
空表:长度等于零的线性表,记为:L=( )。
非空表记为:L=(a1, a2 , …, ai-1, ai , …, an)。
其中,ai(1≤i≤n)称为数据元素;
下角标 i 表示该元素在线性表中的位置或序号 。
线性表的逻辑结构
线性表的特性
1. 有限性:线性表中数据元素的个数是有穷的。
2. 相同性:本章线性表中数据元素的类型是同一的。
3. 顺序性:线性表中相邻的数据元素ai-1和ai之间存在序偶关系(ai-1, ai),即ai-1是ai的前驱, ai是ai-1的后继;a1无前驱,an无后继,其它每个元素有且仅有一个前驱和一个后继。
线性表的存储表示
线性表是一种逻辑结构
线性表的基于数组的存储表示叫做顺序表
线性表的基于指针的存储表示叫做链表(单链表、双链表、循环链表等)
顺序表:线性表的顺序存储结构,用一段地址连续的存储单元,依次存储线性表中的数据元素。
用什么属性来描述顺序表?
存储空间的起始位置
顺序表的容量(最大长度)
顺序表的当前长度(数组的长度大于等于当前线性表的长度 )
随机存取:在O(1)时间内存取数据元素
什么时候不能插入?
表满:last>=MaxSize-1
合理的插入位置:1≤i≤last+2(i指的是元素的序号)
顺序表的表项的插入insert算法(伪代码)
1. 如果表满了,则抛出上溢异常;
2. 如果元素的插入位置不合理,则抛出位置异常;
3. 将最后一个元素至第i个元素分别向后移动一个位置;
4. 将元素x填入位置i处;
5. 表长加1;
算法时间复杂度分析
插入位置 移动元素个数
1 n
2