码迷,mamicode.com
首页 > 其他好文 > 详细

字典树(Tire)模板

时间:2016-04-26 15:57:58      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 struct node
 5 {
 6     node *ne[26];
 7     int cnt;
 8 }*head;
 9 void insert(char *s)
10 {
11     node *p=head,*q;
12     for(int i=0;s[i];i++)
13     {
14         int id=s[i]-a;
15         if(p->ne[id]!=NULL)
16         {
17             p=p->ne[id];
18             p->cnt++;
19         }
20         else
21         {
22             q=(node*)malloc(sizeof(node));
23             for(int i=0;i<26;i++)
24                 q->ne[i]=NULL;
25             q->cnt=1;
26             p->ne[id]=q;
27             p=p->ne[id];
28         }
29     }
30 }
31 int Q(char *s)//查询有多少以该串为前缀的串的数量
32 {
33     node *p=head;
34     for(int i=0;s[i];i++)
35     {
36         int id=s[i]-a;
37         if(p->ne[id]!=NULL)
38             p=p->ne[id];
39         else
40             return 0;
41     }
42     return p->cnt;
43 }
44 void clean(node *p)//释放空间
45 {
46     if(p==NULL)    return ;
47     for(int i=0;i<26;i++)
48     {
49         if(p->ne[i]!=NULL)
50             clean(p->ne[i]);
51     }
52     free(p);
53     return ;
54 }
55 int main()
56 {
57     int n,m;
58     char s[11];
59     while(scanf("%d",&n)!=EOF)
60     {
61         head=(node*)malloc(sizeof(node));
62         for(int i=0;i<26;i++)
63             head->ne[i]=NULL;
64         while(n--)
65         {
66             scanf("%s",s);
67             insert(s);
68         }
69         scanf("%d",&m);
70         while(m--)
71         {
72             scanf("%s",s);
73             printf("%d\n",Q(s));
74         }
75         clean(head);
76     }
77     return 0;
78 }

 

字典树(Tire)模板

标签:

原文地址:http://www.cnblogs.com/L-King/p/5435215.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!