trie树-检索

来源:互联网 发布:淘宝火拼什么意思 编辑:程序博客网 时间:2024/06/08 08:42
#include<stdio.h>#include<stdlib.h>#include<string.h>struct dictree{    struct dictree *child[26];    int n;};struct dictree *root;void insert(char *source){    int len,i,j;    struct dictree *current,*newnode;    len=strlen(source);    if(len==0)    return ;    current=root;    for(i=0; i<len; i++)    {        if(current->child[source[i]-'a']!=0)        {            current=current->child[source[i]-'a'];            current->n=current->n+1;        }        else        {            newnode=(struct dictree *)malloc(sizeof(struct dictree));            for(j=0; j<26; j++)                newnode->child[j]=0;            current->child[source[i]-'a']=newnode;            current=newnode;            current->n=1;        }    }}int find(char *source){    int i,len;    struct dictree *current;    len=strlen(source);    if(len==0)    return 0;    current=root;    for(i=0; i<len; i++)    {        if(current->child[source[i]-'a']!=0)            current=current->child[source[i]-'a'];        else            return 0;    }    return current->n;}int main(){    char temp[11];    int i;    root=(struct dictree *)malloc(sizeof(struct dictree));    for(i=0; i<26; i++)        root->child[i]=0;    root->n=2;    while(gets(temp),strcmp(temp,"#")!=0)        insert(temp);    while(scanf("%s",temp)!=EOF)    {        i=find(temp);        printf("%d\n",i);    }    return 0;}
/**************仅限输入小写字母 输入其他的就出错了************/


原创粉丝点击