字典树的一般方法:写着留着看...........不喜勿喷............
(1)建立起一个链表。
(1)建立起一个链表。
struct node
{
int count;/*数据域*/
struct node *next[26];/*指针域,26个只是表示小写英文字母,如果还要其他的字符则需要继续开大数组*/
};
(2)建立起头节点
struct node *root;
(3)新建节点,为字典树作准备
1.由于是新建,则需要开辟内存 struct node *p=(struct node *)malloc(sizeof(struct node));
p->next[s[i]-'a']=NULL;
(4)建立字典树
1.由于已经新建好了节点,则不需要继续开辟内存。(继续很可能开会超内存,亲身体验)
2.开辟过就不需要开辟,这也是字典树的好处,利于计算前缀;
如果要计算前缀不要忘记将计数器初始化 if(p->next[s[i]-'a']!=NULL)
{
p=p->next[s[i]-'a'];
}
3.如果没有开辟过,则利用节点连接,开辟空间 if(p->nest[s[i]-'a']==NULL)
{
p->next[s[i]-'a']=newset();
}
释放内存:
int dele(node* T)
{
int i;
for(i=0;i<10;i++)
{
if(T->next[i]!=NULL)
dele(T->next[i]);
}
delete T;
return 0;
}
int del(node *t)
{
int i;
if(t==NULL) return 0;
for(i=0;i<10;i++)
{
if(t->next[i]!=NULL)
{
del(t->next[i]);
}
}
free(t);
return 0;
}
......... ................................完成.............................................