您的位置:首页 > 其它

字典树模板

2015-11-14 10:43 369 查看
#include<stdio.h>
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
//字符数
#define MAX 26
//内存最大限制
#define MEMORYLIMIT 60000*1024
const char CH='a';
struct Node
{
int nCount;
Node * Next[MAX];
};
//先分配好内存,malloc比较浪费时间
Node Memory[MEMORYLIMIT/sizeof(Node)];
struct Trie
{
Node * root;
int allocp;//当前在分配内存中的位置

Trie(){
init();
}
void init(){
allocp=0;
memset(Memory,0,sizeof(Memory));
root=getNode();
}
//从分配内存中获得一个节点
Node * getNode()
{
Node * tmp=&Memory[allocp++];
tmp->nCount=1;
for(int i=0;i<MAX;i++)
tmp->Next[i]=NULL;
return tmp;
}

void insert(char *str)
{
Node *tmp=root;
for(int i=0;str[i];i++)
{
int id=str[i]-CH;
if(tmp->Next[id])
tmp->Next[id]->nCount++;
else
tmp->Next[id]=getNode();
tmp=tmp->Next[id];
}
}

int query(char *str)
{
if(root==NULL)
return 0;
Node *tmp=root;
for(int i=0;str[i];i++)
{
int id=str[i]-CH;
if(tmp->Next[id])
tmp=tmp->Next[id];
else return 0;
}
return tmp->nCount;
}
};
int main()
{

int n,m;
char str[100];
Trie trie;
while(gets(str),*str)
trie.insert(str);
while(gets(str))
printf("%d\n",trie.query(str));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: