模式串匹配算法:
#include "stdio.h" int Index(char *S,char *T,int pos) { int i,j,slen,tlen; slen=strlen(S); tlen=strlen(T); i=pos; j=0; while(i<slen&&j<tlen) { if(S[i]==T[j]) { i++; j++; } else { i=i-j+1;//如果j=0就相当于将i右移一位 j=0; } } if(j>=tlen) return i-tlen; else return -1; } void main() { int i=0; char s[]="assacashhhghkjklklklljlhghfgfdfsdshjhjjjjjjjjjjjjghfgfgdfdfdsdsadghyyy6577777756fgdssd"; char p[]="hhhgh"; i=Index(s,p,1); printf("i=%d\n",i); }
#include "stdio.h" void Get_next(char *p,int next[]) { int i,j,slen; slen=strlen(p); i=0; next[0]=-1; //next[1]=0; j=-1; while(i<slen) { if(j==-1||p[i]==p[j]) { i++; j++; next[i]=j; } else j=next[j]; } } int Index_KMP(char *s,char *p,int pos,int next[]) { int i,j,slen,plen; i=pos-1; j=-1; slen=strlen(s); plen=strlen(p); while(i<slen&&j<plen) { if(j==-1||s[i]==p[j]) { i++; j++; } else j=next[j]; } if(j>=plen) return i-plen; else return -1; } void main() { char s[]="assacashhhghkjklklklljlhghfgfdfsdshjhjjjjjjjjjjjjklkloiiuui9 igghfgfgdfdfdsdsadghyyy6577777756fgdssd"; char p[]="jjjjjjjklkloiiuui9 igghfgfgdf"; int next[100]; Get_next(p,next); printf("%d\n",Index_KMP(s,p,0,next)); }
LCS(最长公共字串):
#include "stdio.h" void LCS(char s1[],char s2[]) { int i,j,begin=0,l1,l2,maxlen=0,*matrix; l1=strlen(s1); l2=strlen(s2); matrix=(int *)malloc(l1*sizeof(int)); //for(i=0; i<l1; i++)matrix[i]=0; for(i=0; i<l2; i++) for(j=l1-1; j>=0; --j) { if(s2[i]==s1[j]) { if((j==0)||(i==0)) matrix[j]=1; else matrix[j]=matrix[j-1]+1; } else matrix[j]=0; if(matrix[j]>maxlen) { maxlen=matrix[j]; begin=j; } } if(maxlen==0) printf("没有公共子串"); else { printf("公共子串长度:%d\n",maxlen); printf("begin=%d\n",begin); for(i=begin-maxlen+1; i<=begin; i++) printf("%c",s1[i]); } free(matrix); } void main() { char s1[]="assacashhhghkjklklklljlhghfgfdfsdshjhjjjjjjjjjjjjghfgfgdfdfdsdsadghyyy6577777756fgdssd"; char s2[]="hhhgh"; LCS(s1,s2); }
汉诺塔实现:
/* Note:Your choice is C IDE */ #include "stdio.h" void main() { void hanoi(int n,char a,char b,char c); hanoi(34,'A','B','C'); } void hanoi(int n,char a,char b,char c) { if(n==1)printf("%c=>%c\n",a,c); else { hanoi(n-1,a,c,b); printf("%c=>%c\n",a,c); hanoi(n-1,b,a,c); } }