《 字典树模板_非递归 》
1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 5 using namespace std; 6 7 struct tree 8 { 9 int count; 10 tree *next[26]; 11 }; 12 tree *head; 13 14 void Insert(char *ch) 15 { 16 int pp=0; 17 tree *p; 18 p=head; 19 for(;;) 20 { 21 if(ch[pp]=='\0') break; 22 if(p->next[ch[pp]-'a']!=NULL) 23 { 24 p=p->next[ch[pp]-'a']; 25 p->count++; 26 } 27 else 28 { 29 tree *Q=(tree *)malloc(sizeof(tree)); 30 Q->count=1; 31 for(int i=0;i<26;i++) 32 { 33 Q->next[i]=NULL; 34 } 35 p->next[ch[pp]-'a']=Q; 36 p=Q; 37 } 38 pp++; 39 } 40 } 41 42 int find(char *ch) 43 { 44 tree *p=head; 45 int pp=0; 46 for(;;) 47 { 48 if(ch[pp]=='\0') return p->count; 49 if(p->next[ch[pp]-'a']==NULL) return 0; 50 p=p->next[ch[pp]-'a']; 51 pp++; 52 } 53 return 0; 54 } 55 int main() 56 { 57 // freopen("ACM.txt","r",stdin); 58 head=(tree *)malloc(sizeof(tree)); 59 for(int i=0;i<26;i++) 60 head->next[i]=NULL; 61 //char a[12],b[12]; 62 //while(gets(a)&&a[0]!='\0') 63 //{ 64 // Insert(a); 65 //} 66 //while(scanf("%s",b)!=EOF) 67 //{ 68 // cout<<find(b)<<endl; 69 //} 70 71 return 0; 72 }