乙yonyon

导航

数据结构总结

思维导图

重要概念笔记

一.算法

1.特性

(1)输入输出 (2)有穷性:算法不会出现无限循环,并且每个步骤可在结仇时间内完成
(3)确定性:(4)可行性:算法的每一步都是可行的,也就是每一步都可能通过执行的有限次完成

2.语句频度与时间复杂度的区别

语句频度代表某语句世纪执行的次数。时间复杂度代表算法中基本执行次数T(n)是问题规模n的某个函数,一般以大O法描述。

3.冒泡排序法的空间复杂度:O(1)

二.线性表

1.线性表的存储结构代码:

#define MAXSIZE 20       //存储空间初始分配量
typedef int ElemType;   //ElemType类型根据实际情况而定,这里假设为int
{
	ElemType data[MAXSIZE];  //数组存储数据元素,最大值为MAXSIZE
	int length;               //线性表当前长度
}SqList;

2.时间复杂度

如果插入最后一个位置,或删除最后一个位置,时间复杂度为O(1)
如果插入第一个位置,或删除第一个元素,时间复杂度为O(n)

三.栈与队列

1栈:

(1)顺序栈的四要素:

栈空的条件: s->top=-1; 栈满:s->top=MaxSize -1; 进栈:s->top++; 将e放在top处
退栈:从top中取出元素e j s->top--;

(2)链栈的4要素:

进栈的条件:s->next=NULL; 栈满:无需考虑 进栈:将新数据节点插入到头节点后
出栈:取出头节点之后的节点数据与值并删除。

(3)前缀式的预算规则:连续出现的两个操作数和在它们之前的运算符构成一个最小的表达式。

后缀式:运算符在式中出现的顺序恰为表达式的运算顺序。

2.队列

(1)删除和插入

栈和线性表的区别->删除:线性表 1<=i<=n 栈 i=n 插入:线性表 1<=i<=n+1 栈 i=n+1

(2) 循环队列的四要素:

对空:front=rear; 队满:(rear=1)%MaxSize = front;

3入队操作:先判断队不满 rear=(rear+1)%MaxSize;(将新元素放在rear处)

出队:判读队列不为空 front=(front+1)MaxSize

(3)链队列四要素

对空条件:q->rear=NULL 无需考虑队满 入队:新数据节点插入到单链表表层
出队:删除单链表第一个数据节点

四.串

1.串,线性表的不同点:

(1)处理的数据类型不同:串仅处理字符类型 线性表处理任何字符类型
(2)基本操作针对的类型不同:串:大多以"串的整体"作为操作对象 线性表:大多以"单个元素"作为操作对象。

2 .BF算法(简单匹配算法)

具体描述
(1)从起始下标i=0,j=0开始
(2)重复操作,如果S[i]=T[i],则继续比较下一对字符,否则,回溯下标 i=i-j+1,j=0
(3)如果T中所有字符均都比较完,则返回匹配的开始位置i-t.length;否则返回-1.
BF的时间复杂度:最坏是O(m*n)

3.KMP算法

具体描述
(1)在串S和串T中分别设置比较的起始下标i=0,j=0;
(2)重复操作,如果S[i]=T[i],则继续比较S和T的下一对字符,否则将j回溯到next[j]位置,即j=next[j];如果j=-1,,则将下标i和j分别加1,准备下一趟比较。
(3)如果T中所有字符军比较完毕,则返回本趟匹配开始位置;否则返回-1.
时间复杂度O(n+m)

疑难问题及解决办法

时间复杂度和KMP算法不太会
解决办法:重复回看老师上课的视频,多做课堂派习题,多问,现在还在学习中。

posted on 2020-03-28 19:43  乙yonyon  阅读(270)  评论(0编辑  收藏  举报