字典树模板
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; }
相关文章推荐
- java.net.SocketException: select failed异常的解决方法
- 程序员面试100题之二:跳台阶问题(变态跳台阶)
- 抛出异常
- HDU 5441 Travel
- 适配器模式
- 适配器模式
- 英语单词常用前缀(1-20)
- java项目打成jar包时引用了第三方jar,此时我们该如何解决呢
- Python编写微信打飞机小游戏(七)
- android OTA更新
- 信息熵
- Git/GitLab简介和基本使用方法
- 文件被explorer.exe占用,不能完全删除
- ConnectivityManager(三)
- Linux的时间设置与同步(NTP)
- Could not create the view: An unexpected exception was thrown.问题解决
- mysql 远程root赋予创建用户权限
- 更新 Ubuntu 系统,避免报错「hash校验和不符」
- 黑马程序员_JavaSE基础知识总结二十:课堂上关于集合的几个超经典案例(结课前集合知识温故)
- Git教程