字典树(Trie)

来源:互联网 发布:vb调用数据库数值 编辑:程序博客网 时间:2024/05/16 15:45

好像静态的比动态的好,无聊,写了个静态的。

#include <stdio.h>#include <string.h>#define CLR(a,v) memset(a,v,sizeof(a))#define MAX 1000010struct Trie{    bool in;    Trie* next[26];             //可变}Node[MAX];int top;inline Trie* newnode(){    Node[top].in = false;    CLR(Node[top].next,false);    return &Node[top++];}void Init(){    top = 0;    newnode();}void Insert(char* str)          //可改为bool,即边插入边判断{    Trie* u = &Node[0];    for(int i=0; str[i] ;i++)    {        int num = str[i]-'a';   //可改为-'0'或其他        if(u->next[num] == NULL)            u->next[num] = newnode();        u = u->next[num];    }    u->in = true;}bool Find(char* str){    Trie* u = &Node[0];    for(int i=0; str[i] ;i++)    {        int num = str[i]-'a';   //同上        if(u->next[num] == NULL)            return false;        u = u->next[num];    }    return u->in;}




原创粉丝点击