一、数据结构三要素:逻辑结构、存储结构、数据的运算。
1.数据:是信息的载体,是描述客观事物的数、字符以及所有能输入到计算机中并能被计算机识别并处理的符号的集合。
数据元素:是数据的基本单位,可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位;
例如数据记录就是一个数据元素,由姓名、性别、学号等数据项组成。
数据对象:具有相同性质的数据元素的集合,是数据的一个子集。
数据类型:原子类型(如bool)结构类型(struct{}) 抽象数据类型(ADT,可以构成一个完整的数据结构的定义如,如栈就是一种抽象的数据类型,只表示逻辑结构)
数据结构:同一个数据对象里的数据元素,可以组成不同的数据结构。
数据结构包括逻辑结构、存储结构、数据的运算。
数据项组成数据元素,数据元素组成数据对象,数据对象是数据的一个子集。
2.逻辑结构:数据元素之间的逻辑关系,与数据的存储无关,是独立于计算机的。
逻辑结构分为线性结构和非线性结构
线性结构:数据元素之间只存在一对一的关系,一般线性表、受限线性表(栈和队列、串)、线性表的推广(数组)
非线性结构:结构中的数据元素之间存在一对多、多对多或者没有关系,树形结构(一般树、二叉树:一对多)、图状结构或网状结构(多对多)、集合(没有关系)
3.存储结构:如何用计算机表示数据元素的逻辑关系,主要有顺序存储、链式存储、索引存储、散列存储
链式存储设计时,各个不同结点的存储空间可以不连续,但结点内的存储单元地址必连续。
4.数据的运算:针对于某种逻辑结构,结合实际需求,定义基本运算。
二、算法
程序=数据结构+算法
数据结构:如何用数据正确描述现实世界的问题,并存入计算机。
算法:如何高效地处理这些数据,以解决实际问题,是对特定问题求解步骤的一种描述。
算法的五大特性
(1)有穷性:算法必须是有穷的,程序可以是无穷的。
(2)确定性:每条指令有确切的含义,相同的输入只能得到相同的输出
(3)可行性:可实现
(4)输入:0个或多个输入
(5)输出:一个或多个输出
一个好的算法应考虑达到:
(1)正确性(2)可读性(3)健壮性(4)高效率和低存储量需求
算法时间复杂度:不仅依赖于问题规模n,也取决于待输入数据的性质。
(1)加法规则:多项相加,只保留阶数最高的项,且系数变为1
(2)乘法规则:多项相乘都保留
顺序执行的代码只会影响常数项;一层循环,挑循环中的一个基本操作分析它的执行次数与n的关系;多层嵌套循环,只需关注最深层循环循环了几次
空间复杂度:只需关注存储空间大小与问题规模的相关变量,算法原地工作是指算法所需的辅助空间为常量,即O(1)。