您的位置:首页 > 其它

hdu 1251(字典树找前缀个数)

2011-01-16 12:35 295 查看
/*
   问题如题目

典型的字典树,可以当模板
指针的运用;
申请空间;
*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct node
{
struct node *child[26];//指针,先申请一个地址,后面用到再申请空间
int num;
};
struct node *root;
void insert(char *temp)
{
struct node *cur;
cur = root;
int len = strlen(temp);
for(int i =0;i < len; i++)
{
if(cur->child[temp[i] - 'a'] != 0){
cur = cur->child[temp[i] - 'a'];
cur->num ++;
}
else{
struct node *newnode = new struct node ; //***
//申请空间 == newnode=(struct node *)malloc(sizeof(struct node));

cur->child[temp[i] - 'a'] = newnode;
for(int j =0;j < 26; j++){
newnode->child[j] = 0;
}
newnode->num = 1;
cur = newnode;
}

}
}

int find(char *temp)
{
struct node *cur;
cur = root;
int len = strlen(temp);
if(!len) return 0;          //***
for(int i =0;i < len; i++)
{
if(cur->child[temp[i] - 'a']){
cur = cur->child[temp[i] - 'a'];
}
else
return 0;
}
return cur->num;
}

int main()
{
int i,j,n,len;
char temp[20];
root=(struct node *)malloc(sizeof(struct node));
for(i =0;i < 26; i++)
root->child[i] = 0;

while(gets(temp) && strcmp(temp,"")!=0)
{
insert(temp);
}
while(scanf("%s",temp)!=EOF)
{
printf("%d\n",find(temp));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: