字典树(Trie)

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

#include <stdio.h>
#include <string.h>
#define CLR(a,v) memset(a,v,sizeof(a))
#define MAX 1000010
struct 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;
}




你可能感兴趣的:(struct,null,insert)