数据结构复习(1)

1.***程序=算法+数据结构
2.算法的五个特性:有穷性,确定性,可行性,输入,输出
衡量一个算法要从‘正确性’,‘可读性’,‘健壮性’,‘效率与低存储量需求’来考虑
3.时间复杂度与空间复杂度直观的反映了优劣,不同的算法可以实现相同的功能我们可以用时间复杂度来衡量一个算法的好坏,常见的1(输入输出),n(循环),log以2为底的n次方(最小二乘法)。。
4.线性表与线性链表,这其实反映了两种最常见的存储方式,顺序存储与链式存储,这两种方法各有好坏,顺序存储更直观一个挨着一个存储密度大,存储空间利用率高,便于随机存储,但是在常用的增删却非常无力(经计算每次增删都要移动表中一半元素,若表很大,损耗的时间和占用的cup都很浪费资源),链式存储为元素增加了指针域,我们可以通过修改指针来修改数据,很像有边角的积木将两个积木拆开将第三块放在中间就变成了新的积木,但这样做有每个数据都分出自己的空间给指针域,数据增多问题就会凸显出来,俗话说三百六十行行行出状元,没有好不好吗,只有你会不会用
5.循环链表与双向链表,由于使用了指针我们可以不用考虑数据的物理位置,头尾指针的灵活运用可以产生变种的链表,应用与灵活的地方
6.栈:栈1是一种十分重要的数据结构,最基本的特性先进后出,它应用与各个程序中,函数调用就遵守先调用后返回的原则,正在运行的函数必须在数据区的栈顶
7.队列:队列与栈相反有着先进先出的原则,在生活中也很常见队列中,允许插入的是队尾,允许删除的是对头,用链表表示的队列是链队列。需要注意的是队列的在队列的顺序存储中会出现对头指针随着数据增删发生改变的情况,导致对头指针上升(队列中有很大空间确无法存储元素),我们将队列臆想成一个噬身蛇形状(环)队列就自然呈现出空的形状,
8.串:串是十分常见的数据对象,在多数非数值处理中串也以变量的形式出现,串内有三种机制:定长顺序存储(如同顺序存储,以一组地址连续的存储单元存放串字符数列,独特的事先给定长度,多余的部分会被截取掉)。堆分配(仍是以一组地址连续的存储单元存放串字符数列,但使用了堆(自由储存区)来进行管理,这也是基于字符串的复制进行的,优点是对串长没有限制)。串的块链存储,这里涉及到了串的存储密度=串值所占存储位/实际分配存储位这个公式,串的节点大小不同存储的数据量也不同,一个节点一个也可以存储多个也可能只存储一个
9!!!字符串的匹配算法(查找):基本思想:从主串S的第pos个字符起和模式的第一个字符比较,若相等则逐个比较后面字符否则从主串下一个字符再重新和模式的字符比较,若模式t的每个字符一次与主串S的连续字符序列相等称之匹配成功(只是一种效率低下的基本思想)。
KMP算法:思想,每次匹配不成功的时候不进行指针的回溯,而是利用已经得到的部分匹配结果将模式尽量向后‘滑动‘尽可能远的位置,来避免无用的操作浪费提高效率,求next值:前两位是01这是固定的,从第三位开始找前一位,前两位,等等与前面相同的部分的长度+1为自己的next值

猜你喜欢

转载自blog.csdn.net/qq_34501700/article/details/84430233
今日推荐