您的位置:首页 > 其它

创建字典树模板

2014-08-18 19:29 197 查看
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 10   //M可以根据可能的请况定义;
typedef struct Trie
{
    Trie *next[M];
    int v;   //v可以表示一个字典树到此有多少相同前缀的数目,这里根据需要应当学会自由变化
};
Trie *root ;
void creat(char *str)
{
    int len=strlen(str);
    Trie*pb=root,*pt ;   //pb为当前节点,pt为当前节点的下一个节点
    for( int i=0;i<len;i++)
    {
        int id=str[i]-'0';
        if(pb->next[id]==NULL)
        {
            pt=(Trie*)malloc(sizeof(Trie));
            pt->v=1;
            for ( int j=0;j<M;j++)
                pt->next[j]=NULL ;
            pb->next[id]=pt ;
            pb=pb->next[id] ;
        }
        else
        {
            pb->next[id]->v++;   //pb -next[ id ] -> v即为当前节点的下一个节点的v
            printf("%d  %d\n",pb->v,pb->next[id]->v);
            pb=pb->next[id];
        }
    }
//    pb->v=-1; 标记字符串的结束
}
int main ()
{
    char a[20];
    root=(Trie*)malloc(sizeof(Trie));
    root->v=1;
    for (int i=0;i<M;i++)
        root->next[i]=NULL ;
    while(~scanf("%s",a))
        creat(a) ;
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: