系列文章目录
文章目录
前言
此系列文章为本人于学习《数据结构》一书的摘要和思考,如有错误,望指正。
绪论
数据结构概念
数据
“数据是指对象的表示,即按照适合于通信、解释或处理(借助人或自动装置)的方法所形成关于、概念或指令的表示;数据只是表示,而无含义”(摘自原文)
“数据”是一个抽象的表示,它可以是一个符号,一段话,一串电波等。“数据”仅仅是符号,话,电波本身,它是一种载体,而含义是人赋予的。如“1”这个符号,我们可以规定它表示牛肉,表示红色,但最后我们将其赋予数字一的意义。
抛开“数据”的哲学含义,在计算机中,“数据”是重要原料,是所有被计算机识别、存储和加工的符号的总称。例如:一个程序所用的数据可以是实数,也可以是另一个程序甚至其本身。
数据元素
“数据元素”还可以称为元素、结点或顶点。数据元素可以是一篇文章,一个字符,甚至二进制的一位。数据元素还可以由若干个数据项(也称为域或字段)组成。
姓名 | 学号 |
小米 | 40001 |
小红 | 40002 |
图1.1
如图1.1,一行就是一个数据元素,其中姓名和学号就是数据项
数据结构
“数据结构是指由若干数据元素按照一定方式构成的复合数据以及作用于其上的函数或运算。”
数据结构还未有统一的定义,比较流行的认识是数据结构由数据的逻辑结构、存储结构和运算组成。
数据的逻辑结构
数据元素及其间的数据约束关系合称为数据的逻辑结构。数据的逻辑结构可以用离散数学的二元组概念解释,将数据元素看结点,数据元素间的关系即可看作连接结点的边。
数据的逻辑结构可以分为两大类:线性结构和非线性结构
线性结构
特点
- 若结点数为1,则该结点既是始结点又是终结点
- 若结点数≥2,有且仅有一个始结点和一个终结点,始结点有一个后继结点,终结点有一个前驱结点,中间结点有且只有一个前驱和后继结点
非线性结构
特点
- 结构中的结点可能有多个前驱和多个后继结点
树
- 树中有且仅有一个没有前驱结点的结点,称为根
- 其余结点仅有一个前驱结点,但允许有多个后继结点
- 从根结点到任一非根节点,有且仅有一条路径
- 树中的关系也叫做层次关系,父子关系
图
- 图中任意结点的前驱和后继结点个数可以是0个或者多个
- 图中的关系也称相邻关系
数据的存储结构
定义:数据的存储结构(物理结构)指数据的逻辑结构在计算机中所需的存储空间、空间的构成以及对该存储结构的访问方式等的总称
基本的存储方式有:顺序、链接、索引和散列
顺序存储
- 顺序存储将一组结点放在地址相邻(无空隙)的存储单元内,结点间的逻辑关系由存储单元的顺序关系表达
- 顺序存储为使用整数编码访问数据结点提供了便利
- 通常用于线性数据结构的存储
链接存储
- 链接存储通过在结点存储结构中增加附加指针来存储结点间的逻辑关系,任意逻辑关系都可以用存储地址域表示
- 数据结点一般由数据字段和指针字段组成两部分组成
索引储存
- 通过定义一个由整数域映射到存储地址域的函数,把整数索引值映射到结点存储地址,从而形成一个存储一串指针的索引表
- 对于非线性存储结构来说,使用索引表是经由整数索引值快速找到其对应的数据结点唯一方法
散列存储
- 利用散列函数进行索引值的计算,然后通过索引表求出结点的指针位置
这些存储方法不仅可以单独使用,也可以组合起来使用
对数据结构的操作
插入:向数据结构中增加新结点
删除:将指定的结点从数据结构中删除
修改:改变指定结点的一个或多个字段的值
排序:将某集合中的结点按照某种序关系进行排列
查找:在表中寻找一个其关键词域值等于给定值的
算法
定义:一个算法就是给出求解特定类型问题的运算序列的一个有穷规则集合
算法应具有以下5个重要特征
- 有限性:一个算法在执行有限步骤后必须结束
- 确定性:对一个算法的每个步骤都必须给出精确的描述,每种情况都要有严格描述
- 输入:一个算法由0个或者多个输入
- 输出:算法有1个或者多个输出
- 可行性:算法的所有操作必须充分基本,原则上人通过笔和纸也能完成
假若规划具有除有限性之外的其他4个特征,则称其为计算方法
算法的评价准则
- 正确性:合法的输入有正确的输出
- 时间复杂性:算法所执行基本运算的次数
- 占用空间:存放算法包含的语句、常数、变量、输入数据和实现其运算所需的数据
- 可读性:方便设计者和他人阅读、理解、修改和重用
- 鲁棒性:对有缺失、有噪声或者有错误的输入数据,算法应具有较强的适应力
时空复杂性是算法分析的核心。一个算法的执行时间和所占有的空间数量之间有一定的关系。
算法分析基础
基本算法:分析算法的时间复杂性需要分析算法的基本运算次数。基本运算是指算法运行过程中起主要作用且花费时间最多的运算。
通常在最好、最坏和平均情况下,讨论时间复杂性