#include <stdio.h>
#include <stdlib.h>
#include <string.h> typedef struct TrieNode_t
{
char data;
short int end_flag;//字符串完全添加标志位
struct TrieNode_t* child_node[];
} TrieNode; TrieNode root = { }; //添加字符串到树中
void InsertString(char a[], int len)
{
int i;
TrieNode *p = &root;
for (i = ; i < len; i++)
{
int index = a[i] - 'a';
if (p->child_node[index] == )
{
TrieNode *p_child = (TrieNode *)malloc(sizeof(struct TrieNode_t));
if (NULL == p_child)
{
printf("malloc fail\n");
return;
}
p_child->data = a[i];
p->child_node[index] = p_child;
}
p = p->child_node[index];
}
p->end_flag = ;
} //查询字符串,时间复杂度为O(len)
int SearchString(TrieNode root, char a[], int len)
{
int i;
TrieNode *p = &root;
for (i = ; i < len; i++)
{
int index = a[i] - 'a';
if (p->child_node[index] == )
{
return -;
}
p = p->child_node[index];
} if (p->end_flag == )
{
return ;
}
else
{
return -;
}
} int main()
{
char a[] = "helloworld";
char b[] = "gelloworld";
char c[] = "helltworld";
char d[] = "helloworlr";
char e[] = "hello";
InsertString(a, );
printf("%d\n", SearchString(root, e, ));
return ;
}

Trie树检索字符串的更多相关文章

  1. 利用Trie树对字符串集合进行排序并计算特征值

    该算法用于将一组乱序的字符串反序列化到一个Trie树中,这个过程即可视为对字符串进行了一次排序. 还可以通过调用 GetFeatureString 将该 Trie 树重新序列化. #include & ...

  2. poj 2945 trie树统计字符串出现次数

    用记录附加信息的val数组记录次数即可. trie的原理:每个可能出现的字目给一个编号c,那么整个树就是一个c叉树 ch[u][c]表示 节点u走c边过去之后的节点 PS:trie树还有种动态写法,使 ...

  3. 大规模字符串检索-压缩trie树

    本文使用压缩trie树实现字符串检索的功能.首先将字符串通过编码转化为二进制串,随后将二进制串插入到trie树中,在插入过程中同时实现压缩的功能. 字符编码采用Huffman,但最终测试发现不采用Hu ...

  4. 字典树(Trie树)的实现及应用

    >>字典树的概念 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树.与二叉查找树不同,Trie树的 ...

  5. Trie树的二三事QWQ

    写在前面 Trie,又称字典树,是一种用于实现字符串快速检索的多叉树结构.Trie的每个结点都拥有若干字符指针,若在插入或检索字符串时扫描到一个字符c,就沿着当前节点的c这个字符指针,走向该指针指向的 ...

  6. 查找(二)简单清晰的B树、Trie树具体解释

    查找(二) 散列表 散列表是普通数组概念的推广.因为对普通数组能够直接寻址,使得能在O(1)时间内訪问数组中的任何位置.在散列表中,不是直接把keyword作为数组的下标,而是依据keyword计算出 ...

  7. B树、Trie树详解

    查找(二) 散列表 散列表是普通数组概念的推广.由于对普通数组可以直接寻址,使得能在O(1)时间内访问数组中的任意位置.在散列表中,不是直接把关键字作为数组的下标,而是根据关键字计算出相应的下标. 使 ...

  8. Trie树总结

    Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree.当然很多名字的意义其实有交 ...

  9. Trie 树总结

    Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree.当然很多名字的意义其实有交 ...

随机推荐

  1. Android Studio 编译Gradle提示编码错误

    在Android Studio中,假设我们的代码有中文凝视.显示的时候全然正常,而编译的时候Gradle就会报错,可是又能够编译成功,并且Gradle报的错误信息,也是乱码! 这样我们就不好寻找错误原 ...

  2. 【待解决】maven创建web项目报错

    创建web项目时报错

  3. ArcGIS Python实现Modis NDVI批量化月最大合成

    最大合成法(MVC)能够在Envi中的Band Math中进行,式子是B1>B2,可是无法批量化.本文实如今ArcGIS中利用Python代码批量进行,例如以下: 用到的Modis NDVI数据 ...

  4. 固定管线shader编写:基本属性

    欢迎转载!转载时请注明出处:http://write.blog.csdn.net/postedit/50753008 shader 部分介绍: properties:属性部分 material:材质部 ...

  5. 使用Aliyun Docker 容器镜像/注册表服务

    1.前往阿里云容器镜像服务创建相关资源. 2.登录你的仓库,账户名+公共地址 docker login --username=xxxxxxxxx@aliyun.com registry.cn-hang ...

  6. 23. Merge k Sorted Lists[H]合并k个排序链表

    题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ...

  7. FTP协议讲解

    FTP 概述 文件传输协议(FTP)作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用.FTP的目标是提高文件的共享性和可靠高效地传送数据. 在传输文件时,FTP 客户端程序先与服务器建立连接 ...

  8. Entity Framework 的懒加载、预先加载、显示加载

    1.新建两个实体,一个班级有多个学生 public class Student { public int StudentId { get; set; } public string StudentNa ...

  9. 洛谷P4413 [COCI2006-2007#2] R2(可持久化平衡树维护NTT)

    题意翻译 设S=(R1+R2)/2,给定R1与S (-1000<=R1,S<=1000)(−1000<=R1,S<=1000) ,求R2. 感谢@Xeonacid 提供的翻译 ...

  10. 励志:98岁老爷爷用Windows系统自带画图软件制作的神作

    哈尔拉斯科,是一位很出名的老爷爷,他70岁才接触MS Paint(就是我们熟知的Windows自带的画图软件).他曾经是一名图形艺术家,但是之前他都是手工创作.他熟知怎么用双手进行艺术创作.但是后来, ...