目录
一、数据结构研究
二、基本概念和术语
2.1 基本概念
2.2 什么是数据结构?
2.3 数据结构内容
2.4 逻辑结构种类
2.5 存储结构种类
2.6 数据类型和抽象数据类型
三、算法和算法分析
3.1 算法的定义
3.2 算法的特性
3.3 算法设计要求
3.4 算法好坏评判标准
四、知识总结
一、数据结构研究
数据结构通常是用来研究非数值计算的程序设计中的线性表、树和图,以及它们中数据结点之间的关系和对这些数据结点可进行的操作学科。
二、基本概念和术语
2.1 基本概念
- 数据元素:是组成数据的基本单位通常作为一个整体来进行考虑和处理,如:学生表数据中的每条记录即为一个数据元素也被称为结点或顶点。
- 数据项:构成数据元素的最小单位如:学生表中的每条记录的属性。
三者之间的关系:数据(学生表)>数据元素(学生记录)>数据项(学号或姓名等)。
- 数据对象:将性质种类相同的数据元素(记录)放在一起构成的集合如:正整数数据对象N={1,2,3,4,5,...}
2.2 什么是数据结构?
说白了数据结构就是将一些数据元素(记录)放在一起构成一个集合,并且这些数据元素之间存在着一种或多种特定的联系。
2.3 数据结构内容
- 逻辑结构:在大脑中想象出来的数据元素之间的逻辑邻接关系。
- 物理存储结构: 数据元素在物理内存中的存放表现形式。
- 数据的运算和实现: 在内存中操作这些数据元素。
2.4 逻辑结构种类
- 划分方式一:线性结构和非线性结构。其中:
线性结构(一对一):是指只有一个开始结点和终端结点且两结点之间的数据元素只有一个前趋和后继结点,相邻结点之间呈现出一对一的关系如:学生表中的记录即线性表、栈、队列、串。
非线性结构是指数据元素(即结点)之间不是一对一的关系而是存在一对多如树或多对多的关系如图。
树(一对多):
图(多对多):
- 划分方式二:
集合结构:数据元素之间除了都属于同一个集合外无其它任何关系。
线性结构:数据元素之间存在一对一的线性关系。
树形结构:数据元素之间存在着一对多的层次关系。
图状或网状结构:数据元素之间存在着多对多的任意关系。
2.5 存储结构种类
顺序存储结构:用一组连续的存储单元来存储数据元素其元素之间的逻辑关系根据存储位置的不同来表示如:C语言中用数组来存放具有一定顺序的数据元素。
链式存储结构:将数据元素存放到任意位置的存储单元中,根据存储单元中保存的下一个元素的指针地址来表示数据元素间的前后顺序如:C语言中使用带“数据域+指针域”的方式来表示链式存储。
索引存储结构:在存储数据元素的同时还为其建立一张索引表来记录结点存放的内存地址位置。
散列存储结构:根据数据元素的关键字结合某种公式直接计算出该数据结点预存放的内存地址位置。
2.6 数据类型和抽象数据类型
数据类型: 一组性质相同的值的集合以及定义在此集合上可以进行的操作,如:int、char。
抽象数据类型:从问题中抽象出的数据、不考虑其在计算机内存中的存储形式以及运算实现算法;其包括数据元素、数据元素之间的关系、以及可以对这些数据元素进行的逻辑运算操作。
定义格式如下:
说明:抽象数据类型可以用编程语言来描述实现即用编程语言中已有的数据类型来对应抽象数据类型的数据部分,用函数(方法)来描述抽象数据类型的操作部分。例如:
三、算法和算法分析
3.1 算法的定义
算法就是求解问题的方法和步骤描述,可以使用自然语言(中文、英语等)、流程图、伪代码、编程语言等来描述实现。
3.2 算法的特性
- 有穷性:一个算法总是能在执行有限时间后结束。
- 确定性:算法中的每条指令必须有确切的含义没有二义性即相同的输入会得到相同的输出。
- 可行性:算法的描述可以通过具体的操作来实现如:C语言。
- 输入:一个算法有0或多个输入
- 输出:一个算法有一个或多个输出。
3.3 算法设计要求
- 正确性:给出几个刁难的、苛刻的输入仍能获取正确的输出结果。
- 可读性:要求算法的描述是可以被人们看懂理解的。
- 健壮性:对于一些非法错误的输入,程序不会出现奇怪的信息、终止执行而是对其做出相应的处理并接着运行。
- 高效性:算法的设计在执行时间和存储空间上占用要少。
3.4 算法好坏评判标准
- 时间复杂度。指程序运行所消耗的时间。一般不会以编写算法程序并运行来获取算法的时间复杂度,而是通过找出算法中执行次数最多的语句并求出它的数量级来作为算法的时间复杂度,简记“T(n)=O(f(n))”其中O表示取数量级。
步骤:
1、从代码中找出执行次数最多的语句作为基本语句(*在循环中嵌套层次最深的语句往往是执行次数最多的)。
2、计算基本语句执行的次数从而得到f(n)。
3、根据公式求出数量级用“O”符号表示取数量级。
说明:时间复杂度T(n)按数量级递增顺序如下图(越往右算法的时间复杂度越高):
- 空间复杂度:指算法在执行过程中所消耗的存储空间。一般将代码中临时辅助变量所占用的空间个数来作为空间复杂度的数量级f(n),简记为"S(n)=O(f(n))",n为问题的大小规模。
说明:T(n)时间复杂度和S(n)空间复杂度在实际场景中往往存在矛盾即此消彼长的关系。
四、知识总结
@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!