数据
数据元素(记录、表目,是数据集合中一个个体)
数据项:一个数据元素可由若干数据项组成
数据对象:性质相同的数据元素的集合,是数据的一个子集
数据结构:带结构的数据元素集合
逻辑结构:数据元素之间的逻辑关系,与计算机无关
四种基本的逻辑结构:
- 集合结构
- 线性结构
- 树形结构
- 图状结构
四种不同的存储结构
- 顺序存储结构
- 链式存储结构
- 哈希存储结构
- 索引存储结构
线性表:在数据元素的非空有限集中
- 数据元素在表中的位置只取决于其序号
- 除第一个和最后一个、每个数据元素均只有一个前驱和后驱。存在唯一第一个和最后一个
基础是用顺序表存储(存储结构)。
注意区分有无头结点的情况
当无头结点时,考虑是否需要对头元素做特殊处理
静态链表用数组模拟链表,逻辑上像链表,物理上看是数组。
采用结构体创建带数据域和指针域(整数)的结构,使用这种结构构成数组。
主要是一些实现特定操作的算法题
栈:先进后出(栈顶top、栈底bottom、入栈出栈push\pop)
栈也可以由顺序存储结构或链式存储结构实现(不同的存储结构)
八股:n个元素依次入栈,最多可以得到的合法序列数 ( 2 n ) ! / [ ( n + 1 ) ! ? n ! ] (2n)!/[(n+1)!*n!] (2n)!/[(n+1)!?n!]
应用:递归算法(保存现场变量)、整数表达式求值
队列:先进先出
链式可以是循环队列、逻辑上的优化可以是双端队列。
复杂度:(m+n)
KMP算法思想
当模式串j
位成功匹配或j=0
时,i j
同时自增,否则j
回退到next[j]
记录的位置,重新比较。
next数组求解
k=0
或当前位置能匹配上,下一个位置记录k+1
,否则k
回溯到next[k]
修正
对于next数组的修正,若当前位置可以匹配,本来是直接填写下一个位置的值的,但现在需要检查下一个位置的值是否和k
位置相同,若相同则填写next[k]
的值,不直接写k
模拟KMP算法求Next数组,注意记录关键点在于时刻明确k
的值。