字典树:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。
代码:
#define MAX 10
//Trie的数据结构定义:
typedef struct Trie
{
Trie *next[MAX];
int v; //根据需要变化
};
Trie *root;
/*next是表示每层有多少种类的数,如果只是小写字母,则26即可,若改为大小写字母,则是52,若再加上数字,则是62了,这里根据题意来确定。本代码按数字串。
v可以表示一个字典树到此有多少相同前缀的数目,这里根据需要应当学会自由变化。*/
//生成字典树:
void createTrie(char *str)
{
int len = strlen(str);
Trie *p = root, *q;
for(int i=0; i<len; ++i)
{
int id = str[i]-'0';//数字串,字符串-'A'
if(p->next[id] == NULL)//尾部插入法:
{
q = (Trie *)malloc(sizeof(Trie));
q->v = 1; //初始v==1
for(int j=0; j<MAX; ++j)
q->next[j] = NULL;
p->next[id] = q;
p = p->next[id];
}
else
{
p->next[id]->v++;
p = p->next[id];
}
}//for;
p->v = -1; //若为结尾,则将v改成-1表示
}
//释放内存
void dealTrie(Trie* T)
{
int i;
if(T==NULL)
return ;
for(i=0;i<MAX;i++)
{
if(T->next[i]!=NULL)
dealTrie(T->next[i]);
}
free(T);
return ;
}