模式串匹配算法:
#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); } }