串的模式匹配算法(BF KMP及优化)
串的模式匹配算法(BF KMP及优化)
朴素的模式匹配算法
串的模式匹配是查询主串中是否含有与之匹配的字串,有则返回从主串开始匹配位置后的第一次出现子串的位置,否则返回。
以下图为例:
主串s中存在相同值的子串t 返回在s中pos后第一次出现的位置 否则 返回 0
代码如下 :
1234567891011121314151617181920212223242526272829303132333435#include<stdio.h>#include<stdlib.h>#include<string.h>typedef char * String ;int getindex(String s ,String t,int pos){ int i=pos; int j=0; while(i<strlen(s)&&j<strlen(t)){ if(s[i]==t[j]){ i++; j++; ...
栈的典型应用——计算后缀表达式
栈的典型应用——计算后缀表达式
栈的典型应用——计算后缀表达式
表达式可以分为三种:前缀表达式,后缀表达式,中缀表达式。
中缀表达式是运算符号在两个数字的之间 也就是我们在数学中常常使用的表达式
前缀表达式就是在两个数字之前
后缀表达式就是在两个数字之后,也称为逆波兰表达式
例如计算a+b 后缀表达式就是 a b + ,同理前缀表达式。根据这个意思中缀表达式转换为后缀表达式也就易于理解 a b 也可能是表达式,将a b 之间的字符放在两个表达式之后,而a b 内部的表达式也做相同的操作,这样完成了多层的中缀表达式转成后缀表达式的过程,其实也就是括号法的思想
例如 a+b*c-d+e
中缀 :((a+(b*c)-(d+e))
后缀:abc*+de+ -
计算机为了便于计算也是利用后缀表达式的方式计算的,而实现这种方法就是利用栈的特性——先进后出 ,来完成后缀表达式的计算
以 6 8 2 * + 5 4 + - 为例 如下图:
过程: 遇到数字进栈 ,遇到字符弹栈进行计算后进栈,反复执行此过程,完成计算最后将计算结果弹栈。
c语言实现此过程:
1234 ...
总结——学习编程中那些很容易犯的错误
学习编程中那些很容易犯的错误
前言
回顾一下,距离去年三月份开始学习编程到现在马上快有一年的时间了,在这个期间中走了很多弯路,犯过很多错误,在这里我将结合自己学习的这段过程总结下自己犯过的错误,这也是我在CSDN上的第一篇内容,希望它能提醒自己也希望看到此文的小伙伴们也可以看一下自己有没有踩过这些坑哈(大佬可以自动忽略啦~)
常犯的错误
学习编程的过程中缺少深度思考
每次对新的知识点学习过后,只是单单的从自己所学的内容中记忆而不是去理解并思考这个点本身有什么用法或者是在哪方面可以用到,还有常常遇到的一种情况就是遇到难题不去思考如何用自己所学的知识去理解它,自己认真思考过的东西才是属于自己的,照着别人的思路去解决问题只是临时记忆,一直都没有属于自己解决问题的思路,“学而不思则罔”便诠释了这一现象!
缺乏实践练习
阅读许多相关的技术书籍,看了很多相关教程视频,但自己写的时候感到无从下手,就是因为很少练习在其中所学的技术。不用充分的时间 去练习,忽略了编程的本质——编程能力是动手不断练习实践出来的而不是看视频或者是看书。不断练习才可以让自己对知识点理解更加深刻,“我亦无他 ...