超详细最全数据结构个人笔记【数据结构与时空复杂度】

1.为什么要学习数据结构

​ 为了提高程序的运行效率

2.什么是数据?

​ 数据是指对事物的进行的记录并可以鉴别的符号,可以是文字,图片,字母,特殊字符,视频,音频…,对我们有用的信息都可以称为数据。

3.什么是结构?

​ 结构体是指元素(数据)的相互关联和相互作用的关系,比如学生,图书,交通干线等等

4.根据数据元素之间的关系,分成4个基本结构

  • 集合:结构中的数据是在同属空间内,没有其它关系,比如刚入学的学生

  • 线性结构:数据为一一对应的关系,比如已分发学号的学生,图书馆的图书

  • 树状结构(层次关系):数据为一对多的关系,家族的族谱,公司的架构

  • 图状结构(网状结构):数据为多对多的关系,城市与城市之间的交通干线

5.什么是数据结构

​ 数据结构体 = 数据+数据与数据之间的关系

6.数据结构的组成部分

  1. 逻辑结构
    • 数据之间的内在关系,通常有集合,线性表(一一对应的关系),树(一对多关系),图(多对多的关系)
  2. 存储结构
    • 顺序存储(数组),链式存储(链表),不同的存储方式对数据的处理效率有很大的影响

7.什么是算法

​ 算法是为了实现计算的目的而制定一系列的计算步骤

8.数据结构与算法的关系

数据结构其实就是研究如何有效的组织数据,并提高数据的处理效率,通过研究各种数据之间的内部关系,使用某种特定的方式存储,在此基础上对数据实施各种操作,这种方式称为算法。

9.算法的分析

​ 算法分析是指在正常程序工作下,对其优略分析,一个好的算法指:

1.算法对应程序的消耗时间少
2.算法对应程序的消耗空间少
3.算法结构性好,易读,易移植,易调试(少bug)

10.时间复杂度(应对笔试)

描述程序运行的时间复杂度BigO即大O表示法,计算的是程序运行的次数而不是程序运行的时间,时间复杂度 = 程序运行的次数

公式: T(n) = O(f(n))
T(n) : 表示算法的渐进时间复杂度
f(n) : 程序运行的次数
O : 表示正比关系
	
例子1for(int i = 1; i <= n; i++)
{
    x++;
}
o(1+3n),如果n是无限大13被忽略
时间复杂度是 O(n)
例子2for(int i = 1; i <= n; i++)
{
    for(int j = 1; j <= n; j++)
    {
        x++;
    }
}
时间复杂度 O(N*N) = n^2
例子3:
for(int i = 1; i <= n; i++)
{
    x++;
} 
for(int i = 1; i <= n; i++)
{
    for(int j = 1; j <= n; j++)
    {
        x++;
    }
}
O(N+n^2)--->n无限大,N是常量,所以时间复杂度为O(n^2)
常用的时间复杂度
1.常数阶O(1)
    int a = 1;
	int b = a;
2.对数阶O(logN)==2^k = N ==> K = logN,k为程序运行的次数
	int i = 1;
	while(i < n)
        i = 2*i;
3.线性阶O(N)
    for(int i = 1; i <= n; i++)
        x++
4.线性对数阶O(NlogN)
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <=n; j+=i)
            {
                x++;
            }
        }
5.平方阶(n^2)
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
            x++;
    }
       

在这里插入图片描述

总结:

程序 = 数据结构体 + 算法

11计算以下两个片段的时间复杂度

//片段1
for(int i = 1; i <= n; i=i*2)
{
    printf("%d\t",i);
}
2^i = n --->i = logn
// 片段2
int i = 0;
int s = 0;
while(s < n)
{
    ++i;
    s+=i;
}
s = 1+2+3+...+k ==>k(k+1)/2===>k(K+1)=2n===>2为常量==>k(k+1) = n, k = 根号n
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值