字典树 模版
来源:互联网 发布:centos共享文件夹在哪 编辑:程序博客网 时间:2024/05/01 00:14
/*内容出处:http://www.cnblogs.com/tanky_woo/archive/2010/09/24/1833717.html字典树最主要的操作: ·每次从跟节点开始一次搜索 ·取得要查找关键词的第一个字母,并根据该字母选择对应的子树并转到该子树继续进行检索 ·在相应的子树上取得要查询关键词的第二个字母,并进一步选择对应的子树进行检索 ·迭代过程 ·在某个节点初,关键词的所有字母已被取出,则读取附在该节点上的信息,即完成查找*/#include <iostream>#include<string.h>#include<stdio.h>#include<stdlib.h>#define MAX 26using namespace std;//trie的数据结构定义struct Trie{ Trie *next[MAX]; int v;//根据需要变化};Trie *root;void createTrie(char *str){ int len=strlen(str); Trie *p=root; Trie *q; for(int i=0;i<len;i++) { int id=str[i]-'0';//询问p有指向id的值吗? if(p->next[id]==NULL) {//如果没有执行第id个的值,那么就建立一个指向第id个的值 q=(Trie *)malloc(sizeof(Trie)); //为这个值初始化 q->v=1; //设置q这个节点的孩子节点为空 for(int j=0;j<MAX;j++) { q->next[j]=NULL; } p->next[id]=q; //p深入一层 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';//str为一串数字 p=p->next[id]; if(p==NULL)//若为空集,表示不存在以此为前缀的串 return 0; if(p->v==-1)//字符集中已串是此串的前缀 return -1; } return -1;//此串是字符集中某串的前缀}int dealTrie(Trie *T){ int i; if(T==NULL) { return 0; } for(i=0;i<MAX;i++) { if(T->next[i]!=NULL) dealTrie(T->next[i]); } free(T); return 0;}int main(){ char word[10]; gets(word); createTrie(word); printf("%d",findTrie(word)); return 0;}
- 字典树 模版
- 字典树 基础模版
- 字典树模版
- 字典树模版
- 字典树模版
- 字典树(模版+源码)
- 字典树模版
- 字典树(讲解+模版)
- 字典树 讲解+模版
- HDU1251-字典树模版
- 字典树模版
- 字典树模版
- 《字典树》数组模版
- 字典树模版
- 字典树(讲解+模版)
- 字典树(讲解+模版)
- 字典树 (解析加模版)
- 字典树 (解析加模版)
- J2EE中的几种常用设计模式
- RMI远程调用过程
- POJ 1556 The Doors (计算几何+dij最短路)
- 线性代数课程笔记概述及说明
- 线段树 模版
- 字典树 模版
- 图论 欧拉路代码模版
- windows phone 7注册学生开发帐号
- JS验证控件1.1
- Linux下使用wpa_supplicant连接WPA加密方式的WIFI
- Linux下安装配置common lisp开发环境
- 计算几何题目推荐
- 论语(共二十篇)
- json字符串转换为JSONObject和JSONArray