线性表虽然被放到了第一讲,也是比较容易直观理解的一讲,但实际上还是有很多知识点可以作为计算题的出题材料,小的可以作为选择题,大的可以作为计算或者代码填空等,建议重点掌握:
-
顺序表/链表的时间复杂度分析
-
循环队列的判空/判满条件
-
next数组的手工计算
-
表达式转换的栈应用
知识拓扑
知识点介绍
一、时间复杂度计算题
-
顺序表操作
-
插入操作:移动元素次数 = n - i + 1(最坏O(n),平均n/2)
-
删除操作:同插入操作
-
查找操作:
-
按位查找:O(1)
-
按值查找:O(n)
-
-
-
链表操作
-
头插法建表:O(n)
-
按序号查找:O(n)
-
插入/删除(已知位置):O(1)
-
-
栈/队列操作
-
入栈/出栈:O(1)
-
循环队列判满公式:
(rear+1)%MAXSIZE == front
-
二、存储地址计算题
-
顺序表元素地址计算
-
公式:
LOC(aₙ) = LOC(a₁) + (n-1)*sizeof(ElemType)
-
例题:已知int型顺序表首地址为2000,求第5个元素地址
2000 + (5-1)*4 = 2016
-
-
二维数组行优先存储
-
公式:
LOC(a[i][j]) = base + (i×n + j)×size
-
三、模式匹配计算题
-
BF算法比较次数
-
最坏情况:O(m×n)(主串长m,模式串长n)
-
示例:S="aaaaab", T="aaab" 需比较12次
-
-
KMP算法next数组
-
计算方法:
next[j] = { 0, j=1; max{k | 1<k<j 且 T[1..k-1]=T[j-k+1..j-1]}, 集合非空; 1, 其他情况 }
-
示例:T="ababaa"的next=[0,1,1,2,3,4]
-
四、栈/队列容量计算
-
顺序栈容量
-
栈满条件:
top == MAXSIZE-1
-
例题:设MAXSIZE=100,当前栈中有多少个元素? 答案:
top+1
个
-
-
循环队列元素个数
-
公式:
(rear - front + MAXSIZE) % MAXSIZE
-
例题:front=3, rear=8, MAXSIZE=10 → 有5个元素
-
五、特殊表达式计算
-
中缀转后缀表达式
-
操作数直接输出,运算符入栈
-
优先级:*/ > +- > (
-
示例: 中缀:A+B*(C-D)-E/F 后缀:A B C D - * + E F / -
-
-
后缀表达式求值
-
遇到操作数入栈,遇到运算符弹出栈顶两个元素计算
-
示例: 后缀:5 3 2 * + 计算过程:3*2=6 → 5+6=11
-