2022/02/09今天主要看了《大话数据结构》P1-P65
前面的章节讲的知识比较基础,所以看的也很快。只能概括出自己觉得比较重要的东西,别的东西阐述起来倒还不如书上来得准确。
总结起来比较重要的主要三点
1.时间复杂度的计算
时间复杂度的计算主要是体现出一个实现算法的优劣。举个例子吧,我之前实习面试题有一个是这样的
这道题是非常简单的,但是大多数人的第一反应就是一个for循环解决,这样同样可以解决问题,但是,往下看,对比下面这个解决方法就会发现差距
第一种方法,程序要执行n次,n越大,耗费时间越长
第二种方法,程序只需执行一次,无论n为多少
两种方法对比后高下立见!(还好做这题之前看过这一块东西,答题的时候用的就是第二种)
求时间复杂度推导大O阶的步骤
常见的时间复杂度耗时大小排列
这块的东西很好理解,重要的是推算过程。不需多说,简单举个例子
2.顺序存储结构(数组)的存储方式以及增删改查
描述顺序存储结构需要三个属性
顺序存储结构是占用连续的内存地址中间不能有间断。而且必须是同一类型
就像我们排队买火车票一样,一个人接一个人不间断,如果队伍里面出现一条狗,我们会给狗留位置吗?不会!狗是不会出现的队伍里面排队的。数组也是一样的,必须是同一类型。
数组的插入:
插入数组尾,那好说,只要不超过数组的容量,他只管往后排便是。前面的元素受影响,就像我们排队买火车票,队伍尾巴来人排队,对我们前面的人并没有影响。
如果插入数组中间,那可麻烦了,因为数组的内存地址是连续不断的,中间有人插队,那么后面的就要依次往后退。就像我们排队买火车票,队伍中间来人插队,插入的这个位置后面的人要依次往后挪动才行。但前提也是不超过数组的容量。如果插入的是队伍头,那就是最糟糕的情况了,整个队伍都要后移。
看看书里的介绍吧
3.链式存储结构(链表)的存储方式以及增删改查
单向链表以前做过项目,比较熟悉,实现过程也比较清楚,就不记了