结构:
struct node{ int flag; node *next[27];}*head; |
生成节点:
/*动态分配内存*/node * newnode(){ int i; node * p = new node; // c语言用(node * )malloc(sizeof(node), 这里是动态分配内存,时间上可能消耗的多一些 p->flag = 0; for(i = 0; i < 26; i++) p->next[i] = NULL; return p;}/*静态分配内存*/node T[1000000];int t = 0;node * newnode(){ int i; node * p = &T[t++]; p->flag = 0; for(i = 0; i < 26; i++) p->next[i] = NULL; return p;}注意:1:在此之前head一定要先分配,否则无法执行,这里自己老是出错。2:还有如果处理多组数据的话一定要注意清空T[]数组,否则影响后边的处理。 |
插入操作:
void insert(char *s){ int i,k; int len = strlen(s); node *p = head; for (i = 0; i < len; ++i) { k = s[i] - 'a'; if (p->next[k] == NULL) p->next[k] = newnode(); p = p->next[k]; } p->flag = 1;} |
查找操作:
bool search(char *s){ int i,k; int len = strlen(s); node *p = head; for (i = 0; i < len; ++i) { k = s[i] - 'a'; if (p->next[k]) p = p->next[k]; else return false; } if (p->flag) return true; else return false;} |
程序完毕后释放内存函数:
void del(node * p){ int i; if(p) //p不为空 { for(i =0; i <26; i++) if(p->next[i]) del(p->next[i]); //递归删除每一个p->next[] } free(p); p = NULL; } |