数据结构,算法及线性表总结
思维导图
重要概念笔记
- 顺序存储结构是从内存中取出一段连续地址的空间,将数据依次连续的存储在这段空间中。
- 链式存储结构是指数据存储在内存中的地址是离散的,以数据节点为单位,每个节点包括数据域和指针域。
- 判断算法效率时,函数中的常数和其他次要项可省略,只需关注最高项的阶数。
- 队列在队尾入队,队头出队,即两边都可以操作;栈的进栈和出栈都是在栈顶进行,无法对栈底直接进行操作。
- 判断队空:
Q.rear==Q.front
;判断队满:(Q.rear+1)%Maxsize==Q.front
;队头指针进1:front=(front+1)%Maxsize
;队尾指针进1:rear=(rear+1)%Maxsize
; - BF算法的最好时间复杂度为O(n+m);最坏时间复杂度为O(n*m);KMP算法的时间复杂度为O(n+m);
- next[]数组表明了若模式串中的某字符在主串中失配后,下次需要匹配的模式串中的字符。
疑难问题及解决方案
一开始难以理解KMP算法及next和nextval的计算,后来通过询问同学及查看老师的录播理解了:主串的起始位置=上一轮匹配的失配位置;模式串的起始位置=失配位置的next值。计算next[j]时首先要找到模式串中的公共前后缀,第一位next[j]值设为0,后继next[j]值为最长公共缀+1;若t[next[j]]=t[j]
,则nextval[j]=nextval[next[j]]
,否则nextval[j]=next[j]
。