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 }