数据结构--入门梳理

前言:数据结构与算法是程序员的基本课程,现在就来好好唠唠啥是数据结构,以及数据结构里的时间(空间)复杂度。

ps:如果有说的不对的,感谢各位大佬提出的各个建议(如果你感觉是你对了,那么你就是对的)

  1. 啥是数据结构

所谓数据结构,在普遍的释义是这样的:数据结构是计算机存储,组织数据的方式,指相互之间存在一种或多种的数组元素的集合。这个我感觉不会太难以理解,把这句话好好想想,换成人话就是将一堆的数字进行有序的集合,这种集合可以是一种或多种,大概就是这个意思。

  1. 时间(空间)复杂度

谈到时间复杂度,就不得不说一个概念,算法及算法效率。

首先,算法大家都知道,而算法效率这个可能就稍微有点迷糊了,所谓算法效率,大概分两种,一个是时间复杂度,另一个就是空间复杂度,对,就是老师一天到晚对你耳朵叫的时间复杂度和空间复杂度。

时间复杂度:主要衡量一个算法的运行速度,像游戏卡的不行要求优化的,就是优化时间复杂度。

空间复杂度:主要衡量一个算法所需要的额外空间,现在计算机空间都蛮大的,不像以前一样就几KB。。。。。所以一般来说这个东西并不是很重要,不过有的面试官可能作要求来恶心你。。。。。

实际上大部分情况都是去计算时间复杂度,像什么O(1),O(n),O(n+1)什么的其实计算的是一个概念,为什么这么说呢,比如说一个1和一千万比,肯定是后者大,那为什么不叫O(一千万)呢,是因为在算法里,它两都是可以很快的列出来或者说是算出来,但像X,Y这样的东西,它可以无穷大,也可以无穷小,所以,在有了这个概念后,就基本可以知道,时间复杂度是计算概念,或者说是给这个程序的大概运行时间打了个标签。这里上个代码瞅瞅。

// 计算BubbleSort的时间复杂度?
void BubbleSort(int* a, int n) {
    assert(a);
    for (size_t end = n; end > 0; --end) 
    {
        int exchange = 0;
        for (size_t i = 1; i < end; ++i)
        {
            if (a[i - 1] > a[i])
            {
                Swap(&a[i - 1], &a[i]);
                exchange = 1;
            }
        }
        if (exchange == 0)
            break;
    }
}
 
 最坏执行了(N*(N+1)/2次,时间复杂度为 O(N^2)
// 计算Func3的时间复杂度?
void Func3(int N, int M) {
    int count = 0;
    for (int k = 0; k < M; ++k) {
        ++count;
    }
    for (int k = 0; k < N; ++k) {
        ++count;
    }
    printf("%d\n", count);
}
基本操作执行了M+N次,时间复杂度为 O(N+M)

而空间复杂度也稍微上来看看

// 计算Fibonacci的空间复杂度?
long long* Fibonacci(size_t n) {
    if (n == 0)
        return NULL;

    long long* fibArray =
        (long long*)malloc((n + 1) * sizeof(long long));
    fibArray[0] = 0;
    fibArray[1] = 1; for (int i = 2; i <= n; ++i)
    {
        fibArray[i] = fibArray[i - 1] + fibArray[i - 2];
    }
    return fibArray;
}
动态开辟了N个空间,空间复杂度为 O(N)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值