字典树 C语言

功能说明:每行输入一个单词,插入字典树  输入空行结束插入 ;

                  继续输入字符串,输出字典树中以此字符串为前缀的单词数目。

输入输出实例:

输入:

banana

band

bee

absolute

acm

 

ba

b

band

abc

输出:

2

3

1

0

#include "stdio.h"
#include "string.h"
const int N=5000;
typedef struct Node{
	Node *ch[26];
	int num;
};
Node a[N],*root;
char s[11];
int p=0;
Node *newNode(){
	memset(a[p].ch,0,sizeof(a[p].ch));
	a[p].num=0;
	return &a[p++];
} 
void insert(char *s){
	Node *cur=root;
	cur->num++;
	while(*s!='\0'){
		int t=*(s++)-'a';
		if(cur->ch[t]==NULL)
			cur->ch[t]=newNode();
		cur=cur->ch[t];
		cur->num++;
	}
}
int getans(char *s){
	Node *cur=root;
	while(*s!='\0'){
		int t=*(s++)-'a';
		if(cur->ch[t]==NULL) return 0;
		cur=cur->ch[t];
	} 
	return cur->num;
}
int main(){
	root=newNode();
	gets(s);
	while(s[0]!='\0'){
		insert(s);
		gets(s);
	}
	while(scanf("%s",s)!=EOF)
		printf("%d\n",getans(s));
	return 0;
}

 

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值