裸的字典树还是挺简单的、
四个基本操作建立、查找、插入、删除
建立新结点我是用的c++中 new操作、当然也可以用malloc,都方便
不过指针阿、地址阿、这其中关系什么的我貌似还不是很清楚阿、
因为刚开始我的头结点也是定义的指针、然后程序就炸了、我不清楚原因呢、
有待弄清楚、
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstring>
typedef struct node
{
int cnt;
struct node *next[];
node()
{
cnt=;
memset(next,,sizeof(next));
}
}t;
node root; //头结点
void save(char *s)
{
int len=strlen(s);
if(len==) return;
node *p=&root;
node *tmp=NULL;
for(int i=;i<len;++i){
if(p->next[s[i]-'a']==NULL){
tmp=new struct node;
p->next[s[i]-'a']=tmp;
}
p=p->next[s[i]-'a'];
p->cnt++;
}
}
void findtree(char *s)
{
struct node *p=&root;
int i,l=strlen(s);
for(int i=;i<l;++i){
if(p->next[s[i]-'a']==NULL){
printf("0\n");
return;
}
p=p->next[s[i]-'a'];
}
printf("%d\n",p->cnt);
return;
}
int main()
{
char s[];
while(gets(s)&&s[]!=) save(s);
while(~scanf("%s",s))
findtree(s);
return ;
}