数据的逻辑结构描述
数据的存储结构表示
数据结构的运算定义
设计实现运算的算法
分析算法的效率
培根:方法是旧的,问题是新的。
求解问题 → \rightarrow →数据逻辑结构 → \rightarrow →数据存储结构 → \rightarrow →数据基本运算:算法
1 基本术语
数据元素
:是数据(集合)中的一个“个体”,它是数据的基本单位。
数据项
:用来描述数据元素的,它是数据的最小单位。
数据对象
:具有相同性质的若干个数据元素的集合。
数据结构
:是指带结构的数据元素的集合。
一个数据结构的构成:逻辑结构
+存储结构
+数据运算
。
逻辑结构
:数据元素之间的逻辑关系;
数据的存储结构(或物理结构)
:数据元素及其关系在计算机存储器中的存储方式;
数据运算
:施加在该数据上的操作。
2 逻辑结构
归纳为4种:
1)集合
元素之间关系:无
特点:数据元素之间除了“属于同一个集合”的关系外,无其他逻辑关系。最松散,不受任何制约。
2)线性结构
元素之间关系:一对一
特点:开始元素和终端元素都是唯一的,其余元素都有且仅有一个前驱元素和一个后继元素。
3)树形结构
元素之间关系:一对多
特点:开始元素唯一,终端元素不唯一。除终端元素外,每个元素有一个或多个后继元素;除开始元素外,每个元素有且仅有一个前驱元素。
4)图形结构
元素之间关系:多对多
特点:所有元素都可能有多个前驱元素和多个后继元素。
3 存储结构
归纳为4种:
1)顺序存储结构
所谓顺序就是存储单元的地址连续,其数据间的逻辑关系和物理存储关系是一致的。
![](https://i-blog.csdnimg.cn/blog_migrate/1a708e3787a3802de4a9197318262af1.jpeg)
2)链式存储结构
数据元素的存储单元是任意的,其数据间的逻辑关系需要用一个指针存放数据元素的地址。
![](https://i-blog.csdnimg.cn/blog_migrate/cad5540c9c51e818acea981676ea837d.jpeg)
3)索引存储结构
4)哈希(散列)存储结构
4 数据类型
定义:指一组性质相同的值的集合及定义在此集合上的一些操作的总称。
数据类型可以分为两类:
- 原子类型:是不可再分解的基本类型,包括整型、实型、字符型等;
- 结构类型:由若干个类型组合而成,是可以再分解的。例如,整型数组是由若干整型数据组成的。
抽象数据类型(Absract Data Type,ADT):是指一个数学模型及定义在该模型上的一组操作。
5 算法分析
5.1函数的渐近增长
输入规模n在没有限制的情况下,只要超过一个数值N,这个函数就总是大于另一个函数,我们称函数是渐近增长的。
判断一个算法效率时,我们可以忽略函数中的常数、与最高次项相乘的常数、其他次要项,应该关注主项(最高阶项)的阶数。
5.2算法时间复杂度
确定语句总的执行次数T(n)的数量级。
T
(
n
)
=
O
(
f
(
n
)
)
T(n)=O(f(n))
T(n)=O(f(n))
用大写O( )来体现算法时间复杂度的记法,称之为大O记法。
分析算法的复杂度,关键就是要分析循环体结构的运行情况。
循环的时间复杂度=循环体的复杂度 * 该循环运行的次数
一般地:
- 一个没有循环的算法的执行时间与问题规模n无关,记作O(1),也称作常数阶。
- 一个只有一重循环的算法的执行时间与问题规模n的增长呈线性增长关系,记作O(n),也称线性阶。
- 其余常用的算法时间复杂度还有平方阶O(n2)、立方阶O(n3)、对数阶O(log2n)、**指数阶O(2^n)**等。
![](https://i-blog.csdnimg.cn/blog_migrate/29a3ff1b48f6a35615317e395651ea84.png)
举个李子:
int count=1;
while(count<n){
count=count*2
}
退出循环的条件是,count不再小于n,count又是每次循环乘以2,那么多少个2乘以count才会大于n呢?于是,建立方程 2 x = n 2^x=n 2x=n,得到 x = l o g 2 n x=log_2n x=log2n。所以时间复杂度就是 O ( l o g n ) O(logn) O(logn)。