C语言数据结构中KMP算法编程中的问题

Python09

C语言数据结构中KMP算法编程中的问题,第1张

问题出在void StrCreate(Sqstring *s)这个函数中,

你在函数内给形参malloc内存,这些内存在函数返回时会被回收,因此相当于你没有分配内存。

解决的方法就是在main中分配内存,而不是在create中,或者也可以将create函数改一下:

Sqstring *StrCreate()

{

int i

s=(Sqstring*)malloc(sizeof(Sqstring))

printf("请输入字符串(长度不超过%d)!\n",Maxsize)

for(i=0i<Maxsizei++)

{

scanf("%c",s->data[i])

if(s->data[i]=='1')

break

}

s->length=i

return s

}

调用时先声明一个串指针

Sqstring *s

s = StrCreate()

这样就可以了

/***KMP算法是对蛮力算法的优化,原理很简单。但存在最坏情况,时间复杂度很可能会崩坏到O(m+n)。

* 推荐在高频度数据查找采用优化的Boyer-Moore算法。

*以下为代码

***/

/***首先创建一个ADT,这里给出最简形式,省略部分涉及不到的操作***/

ADT String

{voidStrAssign(SString &T,char*S)//值为S的串T

bool SreEmpty(SString &S) //判断空串

int StrLength(SString &s) //返回长度

void Concat (SString &T,SString&S1,SString &S2)//返回组合的新串

void SubString (SString &Sub,SString &S,int pos, int len)//同串则返回第pos后的串的最初位置,否则为0

}

/***算法部分***/

int KMP(char *T,char *p)

{int n=strlen(T)

int m=strlen(P)

int i,j

for(i=0i<n-mi++)

{j=0

while(j<m&&T[i+j]==P[j])j++

if(j==m) return i

}

return -1}