数据结构第四章学习的是串,数组和广义表。重点学习了串和串的模式匹配和数组的压缩存储
两个串模式匹配算法
1.BF算法
BF算法的思想就是将目标串第一个字符与模式串的第一个字符进行匹配,若相等,则继续比较的第二个字符;
若不相等,则比较原字符串的第二个字符和模式串的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。
2.KMP算法
代码实现如下:
二、作业实践的心得体会
7-1 串的模式匹配 (30 分)
KMP算法的代码实现
int
Index_KMP(SString S, SString T,
int
next[]) {
//S主串,T模式串
int
i = 1, j = 1;
//i指主串,j指模式串
int
result = 0;
while
(i <= S.length&&j <= T.length) {
if
(j == 0 || S.ch[i] == T.ch[j]) { /如果匹配接着往下比较,不匹配就右移T
i++;
j++;
}
else
{
j = next[j];
}
}
if
(j > T.length) {
//当j到最后仍与主串相等+1时匹配成功
result = i - T.length;
}
return
result;
getnext函数
void
getNext(SString T,
int
next[]) {
int
i = 1, j = 0;
next[1] = 0;
while
(i < T.length) {
if
(j == 0 || T.ch[i] == T.ch[j]) {
i++;
j++;
if
(T.ch[i] != T.ch[j]) {
//i和j都右移后如果不同,把最长串最后一个的位置给next
next[i] = j;
}
else
{
//但是如果相同,就让next变为next[j]
next[i] = next[j];
}
}
else
{
//如果j不为0且ch[i] 与 ch[j]不等,表示之前有相同串,但右移后又不同了
j = next[j];
}
}
}
2、求集合交集
在需要进行排序,调用sort函数时需要写头文件#include <algorithm>
三、下一阶段的目标
虽然代码能力提升不大,但会继续跟着老师的视频努力学习。目标是好好完成个人代码,学好接下来的章节内容!