HDProblem-1251统计难题(字典树)

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 
 5 typedef struct tire
 6 {
 7     struct tire *next[26];//由于是小写字母,所以26,数字10,大小写字母52
 8     int v;
 9 }Tire;
10 
11 Tire *root;        //头指针
12 
13 void Insert(char *a)
14 {
15     int len,i;
16     Tire *p=root,*q;
17     for(i=0;i<strlen(a);i++)
18     {
19         int id=a[i]-'a';
20         if(p->next[id]==0)
21         {
22             q=(Tire *)malloc(sizeof(Tire));//malloc(sizeof( ))表示分配内存空间
23             q->v=1;                            //头文件是stdio.h
24             for(int j=0;j<26;j++)
25                 q->next[j]=0;
26             p->next[id]=q;
27             p=q;
28         }
29         else
30         {
31             p=p->next[id];
32             p->v=p->v+1;
33         }
34     }
35 }
36 
37 int findTire(char *str)
38 {
39     Tire *p=root;
40     for(int i=0;i<strlen(str);i++)
41     {
42         int id=str[i]-'a';
43         if(p->next[id]==0)
44             return 0;
45         else
46             p=p->next[id];
47     }
48     return p->v;
49 }
50 
51 int main()
52 {
53     int i;
54     char temp[12];
55     root=(Tire *)malloc(sizeof(Tire));
56     for(i=0;i<26;i++)
57         root->next[i]=0;
58     root->v=2;
59     while(gets(temp),strcmp(temp,""))   //stcmp(temp,"")控制空行结束                
60         Insert(temp);                     //还可以用temp[0]!=''代替
61     memset(temp,'',sizeof(temp));
62     while(scanf("%s",temp)!=EOF)
63         printf("%d
",findTire(temp));
64 }

不太懂的最好看看http://www.cnblogs.com/grubbyskyer/p/3843243.html这篇博客,简单明了

原文地址:https://www.cnblogs.com/len950717/p/3874192.html