HDU ACM 1251 统计难题(字典树)------------模版

http://acm.hdu.edu.cn/showproblem.php?pid=1251

字典上的结构为

字典树的模版题

用了指针的指针

注意理解 **Q 的意思

//View Code
 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 struct Node
 5 {
 6     int n;
 7     Node *child[26];
 8 };
 9 void NewNode(Node **Q)//注意这里使用了指针的指针
10 {
11     (*Q) = (Node *)malloc(sizeof(Node));
12     (*Q)->n = 1;
13     int i;
14     for(i=0;i<26;i++)
15     {
16         (*Q)->child[i] = NULL;
17     }
18 }
19 void Insert(Node *T,char str[])
20 {
21     Node *Q = T;
22     int len = strlen(str);
23     int i;
24     for(i=0;i<len;i++)
25     {
26         if(Q->child[str[i] - 'a'] != NULL)
27         {
28             Q = Q->child[str[i] - 'a'];
29             Q->n = Q->n + 1;
30         }
31         else
32         {
33             NewNode(&(Q->child[str[i] - 'a']));
34             Q = Q->child[str[i] - 'a'];
35         }
36     }
37 }
38 
39 int Search(Node *Q,char str[])
40 {
41     int len = strlen(str);
42     int i;
43     for(i=0;i<len;i++)
44     {
45         if(Q->child[str[i] - 'a'] != NULL)
46         {
47             Q = Q->child[str[i] - 'a'];
48         }
49         else
50         {
51             return 0;
52         }
53     }
54     return Q->n;
55 }
56 int main()
57 {
58     char str[20];
59     Node *T = NULL;
60     NewNode(&T);
61     while(1)
62     {
63         gets(str);
64         if(str[0] != 0)
65         {
66             Insert(T,str);
67         }
68         else
69         {
70             break;
71         }
72     }
73     while(cin>>str)
74     {
75         int num = Search(T,str);
76         cout<<num<<endl;
77     }
78     return 0;
79 }

 

 

 

 

 

 

posted @ 2012-10-20 16:40  zx雄  阅读(386)  评论(0编辑  收藏  举报