【1】数据结构
概念:数据的逻辑结构存储结构及操作
1.数据
数据:不只是一个单独的数值,是一个集合的概念
数据元素:数据的基本单位,由基本的数据项构成。
(如:整个图书馆就是一个数据,一本书就是一个数据元素。
描述这本数据的每个信息就是数据项。)
数据项:是数据元素的基本单位,描述数据元素拥有的信息
节点:就是数据元素
2.逻辑结构
概念:描述数据之间的逻辑规律和数据之间的联系
(元素与元素之间的关系)
逻辑结构的分类:
1.线性结构–>线性存储->一对一的关系–>线性表
头节点无前驱,尾节点无后继
2.层次结构–>树–>一对多的关系–>树
根节点无前驱,叶子节点无后继
3.网状结构–>图–>多对多的关系–>图
举例:运动会体育项目,同一时间段举行项目如下
1.A B 2.C D 3.E F
3.存储结构
概念:数据的逻辑结构在计算机中的具体实现。
存储结构分类:
1.顺序存储:内存空间开辟是连续
数组:内存空间连续开辟,数据元素类型相同
2.链式存储:通过地址将数据元素联系在一起
3.索引存储:通过索引表找到数据元素存放位置,拿到数据
存在两个表格–》索引表 和 数据表
书名—》数据表中查寻书的位置
4.散列存储结构 (哈希存储)
数据元素的存放和位置之间存在一个关系。
散列存储:存在一个关系函数和关键值(key)
将key代码关系函数可以计算出数据存放的位置。
存安照对应位置存,取按照对应位置取。
4.操作
增 删 改 查
【2】算法
1.算法和程序
算法:解决问题的思想办法
程序:用计算机语言对算法的具体实现
2.算法和数据 结构
算法+数据结构=程序
算法的设计:依赖于逻辑结构
算法的实现:依赖于存储结构
3.算法的特性
1)有穷性:执行步骤是有限的
2)确定性:每个步骤,无二义性,没有歧义
3)可行性:能够在有限时间内完成
4)输入和输出:一个算法可以有一个或多个输入和输出
4.如何评价一个算法的好坏
正确性:保证算法是可以正确完成功能的实现
易读性:容易被解读
健壮性:容错(错误)处理
高效性:执行效率,算法执行快慢容易受到计算机性能的影响,
不可以作为评判算法高效性的标准,这通过可执行语句重复执行
次数来衡量算法是否高效 。(时间复杂度)
低存储性:占用空间小 (空间复杂度)
【4】时间复杂度–》程序运行速度
算法的可执行语句重复执行的次数–》频度和
语句频度:算法的可执行语句重复执行的次数
通常时间复杂度用一个问题规模函数表示:T(n)=O(f(n))
T(n)--》问题规模的时间函数
O --》时间数量级
f(n)--》算法中可执行语句重复执行的次数 ,用问题规模n的
某个函数f(n)来表示
n--》是问题的规模,指的是输入数据量的大小
举例:有数组 int st[10]; 10个数据排序(冒泡排序)
10 个数据 就是规模
for(i=0;i<10-1;i++)
{
for(j=0;j<10-1-i;j++)
{
if()
交换
}
}
f(n)-->f(10)=45 T(n)=O(f(n))=O(1)
举例2:1+...+100的和
for(i=1;i<=100;i++)
{
sum=sum+i;//重复执行语句
}
f(n)-->f(100)=100 -->T(n)=O(100)
变成:T(n)=O(1)
sum=na1+n(n-1)d/2
sum=100+100(100-1)/2=100+50*99=5050
举例:有数组 int st[n]; n个数据排序(冒泡排序)
n 个数据 就是规模
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if()
交换
}
}
i=0 n-1
i=1 n-2
i=2 n-3
....
i=n-4 3
i=n-3 2
i=n-2 1
f(n)-->f(n)=(n-1)n/2 2(n-1)/2+(n-1)(n-1-1)/2
=n^2/2-n/2
T(n)=O(n^2)
计算大O的方法
(1)根据问题规模n写出表达式 f(n)
(2)如果有常数项,将其置为1
//当f(n)的表达式中只有常数项的时候,有意义 f(n) = 8
//T(n)=O(1)
(3)只保留最高项,其它项舍去
(4)如果最高项系数不为1,除以最高项系数
【5】空间复杂度
算法占用的空间大小。一般将算法的辅助空间作为衡量空间复杂度的标准。
算法占用的存储空间包括:
1)输入输出数据所占空间
2)算法本身所占空间
3)额外需要的辅助空间
void swap(int *a,int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
输入输出数据所占空间是必须,算法本身所占空间可以通过
精简算法来缩减,而在运行时候使用的辅助变量所占空间,
即辅助空间是衡量 空间复杂度的关键因素。
【6】线性表
线性表:顺序表 链表(单向链表,单向循环链表,双向链表,双向循环链表)
栈、队列
逻辑结构:线性结构
存储结构:顺序存储结构
链式存储结构
特点:一对一的关系,头节点没有前驱、尾节点没有后继