0428
看了牛客上剑指offer题,最简单的堆栈都不会,zz,程序猿不适合我(-^-)
从入门到放弃gg。
今天开始make plan to study python.data construct.
♥☺一、数据元素的存储形式有两种
- 顺序存储: 数据元素存储在地址连续的存储单元离,其数据间的逻辑关系和物理关系是一致的。(ep.数组)
- 链式存储: 把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。链式存储结构的数据元素存储关系不能反应其逻辑关系,所以需要用一个指针来存放数据元素的地址,这样通过地址可以找到相关联数据元素的位置。每一个存储都存放自身数据加指针,指针指向下一个元素地址
♥☺二、第二节
- 算法的五个基本特征:输入(0个或多个输入)、输出(至少有一个输出)、有穷性(有限步骤之后自动结束)、确定性(无二义性)和可行性(每一步都是可行的)。
♥☺三、第三节 算法效率的度量
- 算法效率的度量:函数中的常数和其他次要项可以忽略,关注最高次项的阶数。
0429
早上开始看视频,我真棒
♥☺四、第四节 算法时间复杂度
- 随着输入规模n的增大,T(n)增长最慢的算法为最优算法。
下图三个求和算法的时间复杂度分别为O(1),O(n),O(n^2)。
- 推导大O阶的方法:
- 用常数1取代运行时间中所有加法常数
- 在修改后的运行次数函数中,只保留最高阶项
- 若最高阶项存在且不是1,去除与这个项相乘的常数
- 得到的最后结果就是大O阶
证明了第一条方法,为 O(1)
常见的时间复杂度总结
所耗费时间从小到大依次是:O(1)<O(log n)<O(n)<O(nlog n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
0430 放假前一天依然很认真鸭
♥☺五、第五节 线性表
- 定义:由零个或者多个数据元素组成的有限序列。
- 抽象数据类型(abstract data type):和类有点像,是指一个数学模型及定义在该模型上的一组操作 序号从1开始
- 线性表的顺序存储结构/链式存储结构(编程相关give up)
链表:第一个结点的存储位置叫做头指针(不为空),最后一个节点指针为空
这两个语句不可以互换噢
结论:线性表有两种结构,顺序存储结构/链式存储结构
- 若线性表需要频繁查找,很少进行插入和删除操作时,宜采用顺序存储结构。
- 若需要频繁插入和删除时,宜采用单链表结构。
♥☺六、第六节 栈和队列
- 栈的特征:后进先出(last in first out,LIFO)只在表尾进行删除和插入操作。
- 队列的特征:只允许在一端进行插入操作,而在另一端进行删除操作的线性表。先进先出(first in first out,FIFO)
- 栈一般用顺序表来实现,队列一般用链表来实现
- 递归:函数不断调用本身,必须有一个条件退出。
递归函数分为调用和回退阶段,递归的回退顺序是它调用顺序的逆序。(本质是入栈出栈)