基本概念
- 时间复杂度比较
O ( 1 ) < O ( log 2 n ) < O ( n ) < O ( n log 2 n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) < O ( n n ) O(1)<O\left(\log _{2} n\right)<O(n)<O\left(n \log _{2} n\right)<O\left(n^{2}\right)<O\left(n^{3}\right)<O\left(2^{n}\right)<O(n !)<O\left(n^{n}\right) O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
口诀:
常对幂指阶
算法原地工作
——算法所需内存空间为常量- malloc申请的是堆中的空间,需要手动回收
线性表
基本内容
- 定义:相同数据类型,有序序列,有限长度
- 常用操作:创建、销毁、增加、删除、修改、查找
- 分类:按照物理存储的方式不同,分为顺序表和链表。
注意相关基本操作的特殊情况。比如:
- 顺序表插入前要检查是否已满,删除前检查是否已空
- 使用含有头结点的链表和不适用头结点的链表的时候基本操作的不同之处
静态链表
:分配一整片连续的区域,节点位置相对集中,使用静态数组的方式存储链表
循环队列
可用于判断队空队满的方法有三种:
- 增加描述队列大小的size变量,size=0,队空;size=maxsize,队满
- 增加描述上一步操作的flag变量。例如令上一步为插入操作则为1,删除造作为0。当头指针head和为指针rear相等时,flag=1表示队满,flag=0表示队空
- 通过牺牲一个存储空间的方式(通常使用这种)。
- 队满:(rear+1)%maxsize=head
- 队空:rear=head
- 插入元素,队尾指针rear=(rear+1)%maxsize
- 删除元素,队头指针head=(head+1)%maxsize