字典树模板

来源:互联网 发布:html select js 选中 编辑:程序博客网 时间:2024/06/06 12:13
#include<stdio.h>#include<iostream>#include<string>#include<cstring>using namespace std;//字符数#define MAX 26//内存最大限制#define MEMORYLIMIT 60000*1024const 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;}

0 0
原创粉丝点击