字典树trie

字典树trie

又称单词查找树,trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。(这段来自百度百科。。)

字典树

char word1[maxn][51],word2[maxn][51];
int cnt=0;
char ans[51];

struct Node
{
    char s[51];
    bool end;      //结束标志,1表示有单词,0表示没有
    Node *next[26];
};Node T={{0},0,{NULL}}; //头结点不存数据,牺牲一个结点的空间只是为了方便。。

void insert(char*s1,char*s2)
{
    Node *p=&T;
    for(int i=0;i<strlen(s2);i++){
        if(p->next[s2[i]-'a']==NULL){
            Node *newnode=(Node*)malloc(sizeof(Node));
            memset(newnode,0,sizeof(Node));
            p->next[s2[i]-'a']=newnode;
        }
        p=p->next[s2[i]-'a'];
    }
    p->end=1;
    strcpy(p->s,s1);
}

bool find(char *s)
{
    Node *p=&T;
    for(int i=0;i<strlen(s);i++){
        if(p->next[s[i]-'a']==NULL) return false;
        p=p->next[s[i]-'a'];
    }
    if(p->end==0) return false;
    strcpy(ans,p->s);
    return true;
}

int main()
{
    char tmp[110];
    while(gets(tmp)&&strlen(tmp)){
        sscanf(tmp,"%s%s",word1[cnt],word2[cnt]);
        insert(word1[cnt],word2[cnt]);
        cnt++;
    }
    while(gets(tmp)!=NULL&&strlen(tmp)){
        if(find(tmp)) printf("%s\n",ans);
        else printf("eh\n");
    }
    return 0;
}
trie树

 

转载于:https://www.cnblogs.com/--560/p/4330230.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值