#include <stdio.h>
#include <string.h>
#include <stdlib.h>typedef int Position;  //返回数组下标
#define NotFound -1     void BuildMatch( char *pattern, int *match )
{Position i, j;int m = strlen(pattern);match[0] = -1;             //match[0]肯定是-1for ( j=1; j<m; j++ ) {        //对每一个下标计算match值i = match[j-1];            //把前一个match值记在i里while ( (i>=0) && (pattern[i+1]!=pattern[j]) )i = match[i];      //让i回退if ( pattern[i+1]==pattern[j] )match[j] = i+1;else match[j] = -1;}
}Position KMP( char *string, char *pattern )
{int n = strlen(string);       //得到字符串长度int m = strlen(pattern);  //得到模式串长度Position s, p, *match;if ( n < m ) return NotFound;match = (Position *)malloc(sizeof(Position) * m);   //定义整型数组matchBuildMatch(pattern, match);            //计算match的值s = p = 0;                         //一开始指向起点0while ( s<n && p<m ) {              //s和p都还没到结尾if ( string[s]==pattern[p] ) {s++; p++;                    //相配则一起往前移动}else if (p>0) p = match[p-1]+1;    //不相配,p指针往回移else s++;                      //p=0,第一个字符就不匹配,s指针往前移}return ( p==m )? (s-m) : NotFound;  //p到结尾,匹配成功,返回匹配上的位置s-m。否则匹配失败
}int main()
{char string[] = "This is a simple example.";char pattern[] = "simple";Position p = KMP(string, pattern);if (p==NotFound) printf("Not Found.\n");else printf("%s\n", string+p);return 0;
}

代码来自中国大学MOOC浙江大学版数据结构

【数据结构】KMP算法(c语言)相关推荐

  1. 《数据结构与算法 Python语言描述》 读书笔记

    已经发布博客 <数据结构与算法 Python语言描述> 读书笔记 第二章 抽象数据类型和Python类 2.1 抽象数据类型abstract data type:ADT 2.1.1 使用编 ...

  2. 《数据结构与算法 Python语言实现》书评与学习心得

    做为Python小白,本人几个月前读完了Mark Lutz的1400页巨著<Learning Python>(太TM啰嗦了,读过的请举手),本打算继续学习下一步<Programmin ...

  3. 数据结构python课后答案_数据结构与算法:Python语言描述 1~5章课后习题

    数据结构与算法:Python语言描述 1~5章课后习题 发布时间:2018-07-19 20:42, 浏览次数:1885 , 标签: Python MarkDown语法写的,不知道为啥上传到CSDN不 ...

  4. 《数据结构与算法 C语言版》—— 3.8习题

    本节书摘来自华章出版社<数据结构与算法 C语言版>一 书中的第3章,第3.8节,作者:徐凤生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.8习题 1名 ...

  5. 《数据结构与算法 C语言版》—— 2.5上机实验

    本节书摘来自华章出版社<数据结构与算法 C语言版>一 书中的第2章,第2.5节,作者:徐凤生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.5上机实验 实 ...

  6. 《数据结构与算法 C语言版》—— 2.7习题

    本节书摘来自华章出版社<数据结构与算法 C语言版>一 书中的第2章,第2.7节,作者:徐凤生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.7习题 1描 ...

  7. java递归单链表查找中间元素_《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)...

    转载请注明出处:http://blog.csdn.net/xdz78 #include #include //查找单链表中的特定元素,<数据结构与算法--c语言描述> 3.11 答案 in ...

  8. 数据结构与算法python描述_数据结构与算法——Python语言描述.pdf

    数据结构与算法--Python语言描述.pdf 欢迎加入非盈利Python编学习交流程QQ群783462347,群里免费提供500+本Python书籍! 欢迎加入非盈利Python编程学习交流程QQ群 ...

  9. 数据结构视频教程 -《[猎豹网校]数据结构与算法_C#语言》

    整个视频打包下载地址:史上最全的数据结构视频教程系列分享之<[猎豹网校]数据结构与算法_C#语言>,转载请保留出处和链接! 更多优秀资源请访问:我是码农 在猎豹网校授课的基本都是在IT行业 ...

  10. 数据结构与算法python语言实现-第四章答案

    数据结构与算法python语言实现-第四章答案 4.1 def findmax(S, index=0):if index == len(S) - 1:return S[index]max=findma ...

最新文章

  1. 2021年大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转换、行转列)
  2. 调用函数,判断各位数字立方和是否等于它本身
  3. Java 性能优化实战记录(2)---句柄泄漏和监控
  4. 【Unity3D自学记录】Unity3D网络之Socket聊天室初探
  5. HttpClient使用具体解释
  6. Ajax专题:异步交互局部刷新初步
  7. python列表的内置方法_python 基础之列表切片内置方法
  8. 32.项目总结--技术点部分
  9. 数据结构(C++版)校园导游咨询系统课程设计
  10. wordpress短代码转php,七个超级实用的WordPress 短代码
  11. android 加速度传感器测步数,基于加速度传感器的运动步数检测算法研究
  12. 记一次使用fiddler抓包抖音的挫折
  13. H5时代的多行文本框
  14. 记录微信小程序web-view页面分享出去之后没有返回首页按钮,微信小程序WebView页面分享出去后没有返回首页按钮,全局使用的自定义导航【解决办法】
  15. Android自定义View高级动效之---安卓流星雨动效|Android流星雨专辑封面
  16. Java面试题:数据库优化策略有哪些?
  17. Paper Reading 《SimCSE》
  18. 【OpenCV】Qt + OpenCV 开发配置 + 入门知识(代码示例)
  19. sync.WaitGroup的用法
  20. 细细品味C#——抽象、接口、委托、反射

热门文章

  1. SQLErrorCodeSQLExceptionTranslator
  2. 切点方法的事务参数的配置
  3. Spring AOP在事务中的应用典范
  4. Lambda表达式的无参数无返回值的练习
  5. css box 等高布局,css实现等高布局有哪些方式
  6. 学计算机的男孩子怎么追女孩子,男孩子追女孩子的套路,原来有这么多,快来学一学...
  7. mysql 界面 创建用户名和密码是什么_PLSQL操作Oracle创建用户和表(含创建用户名和密码)...
  8. 深入理解Kafka(1)
  9. python3 数组重复数字,[python3] 3_01 数组中重复的数字
  10. mysql sql优化书籍_MySQL SQL优化的正确姿势