数组版 来自大白书
int ch[maxnode][sigma_size];
int val[maxnode];
int sz;
void init()
{
sz = 1;
memset(ch[0], 0, sizeof(ch[0]));
}
int idx(char c)
{
return c - ‘a‘;
}
void insert(char *s)
{
int u = 0, n = strlen(s);
for(int i = 0; i < n; i++)
{
int c = idx(s[i]);
if(!ch[u][c])
{
memset(ch[sz], 0, sizeof(ch[sz]));
val[sz] = 0;
ch[u][c] = sz++;
}
u = ch[u][c];
}
val[u] = 1;
}
void find(char *s)
{
int u = 0, n = strlen(s);
for(int i = 0; i < n; i++)
{
printf("%c", s[i]);
int c = idx(s[i]);
u = ch[u][c];
if(val[u] == 1)
break;
}
}
原文:http://blog.csdn.net/u011686226/article/details/23262211