trie树

字典树的两种实现方法:

 

数组实现的主要代码:

struct node
{
    int num;
    bool f;
    int next[26];
    void init(){num=0;f=0;memset(next,-1,sizeof(next));};
}trie[1000000];
int p;
char input[100];
void root()
{
    trie[p=0].init();
}
void insert(char* a)
{
    int index=0;
    int len=strlen(a);
    int cur;
    for(int i=0;i<len;i++)
    {
        cur=a[i]-'a';
        if(trie[index].next[cur]==-1)
        {
            trie[++p].init();
            trie[index].next[cur]=p;
        }
        trie[index].num++;
        index=trie[index].next[cur];
    }
    trie[index].f=1;
    trie[index].num++;
}


 

链表实现:

 

typedef struct t_node
{
	struct t_node * child[max];
	char ch;
}t_node ,* Node;

Node root;
char st[50000][100];

void insert(char *str)
{
	int i,index,len;
	Node cur,newnode;
	
	len=strlen(str);
	if(len==0)
		return ;
	cur=root;
	
	for(i=0;i<len;i++)
	{
		index=str[i]-'a';
		if(cur->child[index]!=NULL)
		{
			cur=cur->child[index];
		}
		else
		{
			newnode=(Node)calloc(1,sizeof(t_node));

			cur->child[index]=newnode;

			cur=newnode;
		}
	}
	cur->ch=1;
}


 

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