自建索引, 仅供参考, 以备后查
一、绪论
数据结构是介于数学、计算机硬件和软件之间的一门核心课程。计算机算法与其密切相关。
数据(Data):能输入到计算机并能被程序处理的信息,文字、表、图像等。
数据元素(Data Element):组成数据 的基本单位,又称为 元素、结点 、顶点、记录等。
数据对象(Data Object)或数据元素类(Data Element Class):同类数据的集合,数据的子集。(List<Student>)
数据结构(Data Structure):数据元素之间抽象关系 和 这种关系在计算机中的存储表示。 常见结构:集合(同属关系)、线性(一对一)、树形(一对多)、图形(网状结构,多对多)。由两部分组成:一是数据元素集合,二是元素关系集合。 DataStructure=(D,R) 二元组来表示,D是数据元素的有限集,R是D数据关系的有限集。
逻辑结构(Logical Structure):数据元素的逻辑关系,抽象数学模型,独立于存储器,与具体计算机设备无关。
存储结构(Storage Structure):逻辑结构在内存中的存储方式,又称物理结构,需要使用某种计算机编程语言来实现,一般分为有顺序存储和链式存储,另有为了查找方便的索引存储(增加索引文件,拆分顺序表为多个子表)和散列存储(数据元素与存储地址之间建立映射关系)。
数据处理:对数据进行查找、插入、删除、合并、排序、统计及简单计算。
数据类型(Data Type):一类是非结构的原子类型、另一类是结构类型。
算法(Algorithm):按照特定步骤解决问题的处理过程。加减乘除、指数、矩阵等的运算,都统称算法
算法要素:操作、控制结构、数据结构 3要素
操作:不同函数库、类库差异较大,但基本操作有:算术运算(加减乘除)、关系比较(大于、小于、等于、不等于)、逻辑运算(与、或、非)、数据传送(输入、输出、赋值)。
控制结构:定义算法框架和操作的执行次序。有顺序结构、选择结构和循环结构。
数据结构:算法操作的对象即数据。数据间的逻辑关系、存储方式及处理方式即是数据结构。
算法性质:有穷性、确定性、可行性、输入性和输出性
有穷性:算法执行有限步骤后结束,每个步骤能在有限时间内完成。
确定性:每种情况有对应操作,无论在任何条件下,算法只有一条执行路径。
可行性:操作可以通过已实现的基本操作在有限次执行中实现。
输入性:输入数据做变量参与运算。
输出性:算法执行完毕最终的结果。
设计要求:目的是为了设计出良好算法,需所有 正确性Correctness、可读性Readability、稳健性Robustness、高效率低存储
正确性:对合法数据能正确计算,对极值数据等精心选择的典型的苛刻的数据依然能正确计算。
可读性:算法就易于人理解。
稳健性:对于非法数据,能恰当处理,不能产生莫名其妙的输出结果,充分考虑异常情况。
高效率和低存储:执行时间 和 运算过程中所需的存储空间。
描述方法:自然语言、流程图、伪代码、计算机语言
自然语言:正常交流语言,容易产生二义性、歧义。
流程图:描述清晰,容易表达选择结构,不依赖任何计算机和程序设计语言。缺点是流程线滥用(GOTO)。
伪代码:非正式、透明的表述方法、非编程语言,针对的是虚拟计算机。通常采用 自然语言、数学公式 和 符号来描述算法步骤,同时采用控制结构来描述执行顺序。
计算机语言:各种程序设计语言,Java、C、C++、C# 等。
分析评价:由于算法设计的优劣决定着软件性能,因此算法分析是利用数学工具
二、线性表
三、栈和队列
四、串
五、数组与广义表
数组:N个相同类型的数据元素构成的有限集合,占用一块连续地址,以字节为计数单位。特点有 数据类型相同、随机存取结构、个数固定。
二维数组:行序为主 和 列序为主 两种存储次序。
行序存储:对于a[M][N]的任意寻址公式为 Loc(a[i,j]) = Loc(a[0,0]) + (i*n+j) * k (0<=i<m,0<=j<n ,k为单个元素所占空间 可理解为C语言中sizeof(Type)的值 Java中不需要)
列序存储:Loc(a[i,j]) = Loc(a[0,0]) + (j*m+i) * k (限定条件同上)
矩阵: