字典树模版
2015-08-15 09:24
363 查看
定义:
next表示每层有多少种类的数,v表示字典树到此有多少相同前缀数目。
生成字典树:
查找过程:
动态字典树程序结束时应该释放动态空间。
#define MAX 26 typedef struct Trie { Trie *next[MAX]; int v; //根据需要变化 }; Trie *root;
next表示每层有多少种类的数,v表示字典树到此有多少相同前缀数目。
生成字典树:
void createTrie(char *str) { int len = strlen(str); Trie *p = root, *q; for(int i=0; i<len; ++i) { int id = str[i]-'0'; if(p->next[id] == NULL) { q = (Trie *)malloc(sizeof(Trie)); q->v = 1; //初始v==1 for(int j=0; j<MAX; ++j) q->next[j] = NULL; p->next[id] = q; p = p->next[id]; } else { p->next[id]->v++; p = p->next[id]; } } p->v = -1; //若为结尾,则将v改成-1表示 }
查找过程:
int findTrie(char *str) { int len = strlen(str); Trie *p = root; for(int i=0; i<len; ++i) { int id = str[i]-'0'; p = p->next[id]; if(p == NULL) //若为空集,表示不存以此为前缀的串 return 0; if(p->v == -1) //字符集中已有串是此串的前缀 return -1; } return -1; //此串是字符集中某串的前缀 }
动态字典树程序结束时应该释放动态空间。
相关文章推荐
- BASH
- 黑马程序员——String
- Ubuntu 有望让你安装最新 Nvidia Linux 驱动更简单
- 解决A master URL must be set in your configuration
- 【C语言经典实例】-选择排序
- 一个优秀程序员的成长之路
- SQL Server无日志恢复数据库(2种方法)
- 黑马程序员——多线程2多线程安全性的探讨
- PHP程序在引号前自动加反斜杠的原因与处理办法
- Android(java)学习笔记158:Java程序入口和Android的APK入口
- HDU 2068 RPG的错排(排列组合,错排)非常详细~
- HDU 5289-B - Assignment-贪心
- hdu 5055 Bob and math problem
- 强引用,软引用与弱引用
- android apk文件安装
- 生产汽车(单调队列+斜率优化)
- 二叉树 (Binary Tree)的遍历
- POJ 2253 Frogger
- Java灵活文档导出-Freemarker
- Win10开始菜单遭用户吐槽:动态磁贴功能不像Win8.1那样