数组版 来自大白书
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