第四章学习小结
这一章主要学习了串的定义、存储和模式匹配算法、数组的存储、特殊矩阵的压缩存储、以及广义表的定义和存储。
其中串的模式匹配是一个难点,BF算法很好理解,就是上学期用的逐个匹配,但是KMP算法有点难理解,还不是很懂
1 int Index_KMP(SString S,SString T,int pos) 2 {//利用模式串 T 的 next 函数求 T 在主串 S 中第 pos 个字符之后的位置 3 //其中,T非空, 1<=pos<=s.length 4 i=pos;j=1; 5 while (i<=S.length && j<=S.length) 6 {//两个串均未比较到串尾 7 if ( j==0 || s[i] ==T[j] ) { ++i; ++j; }//继续比较后继字符 8 else j=next[j];//模式串向右移动 9 } 10 if (j>T[0]) return i-T[0] ;//匹配成功 11 else return 0;//匹配失败 12 }
1 void get_next(SString T,int next[]) 2 {//求模式串 T的 next 函数值并存入数组 next 3 i=1; 4 next[1]=0; 5 j=0; 6 while(i<T[0]) 7 { 8 if(j==0 || T[i]==T[j]) {++i; ++j; next[i]=j; } 9 else j = next[j]; 10 } 11 }
数组的学习和之前差不多,主要是增加了特殊数组的压缩存储,还挺有意思的
还有新接触的广义表,分为头尾链表的存储结构和扩展线性链表的存储结构,也挺复杂的
这一章的内容虽然不多但是都不太好理解,还有一些地方没弄懂,接下来会继续看书和复习慕课视频帮助理解