字典树
字典树(Trie)详解 - Seaway-Fu - 博客园 (cnblogs.com)
数据结构:字典树 (Trie) - 乌漆WhiteMoon - 博客园 (cnblogs.com)
C语言实现字典树代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 26 typedef struct TrieNode { int nCount;//记录该字符出现次数 struct TrieNode* next[MAX]; }TrieNode; TrieNode Memory[100000]; int allocp=0; /*初始化*/ void InitTrieRoot(TrieNode* *pRoot) { *pRoot=NULL; } /*创建新结点*/ TrieNode* CreateTrieNode() { int i; TrieNode *p; p=&Memory[allocp++]; p->nCount=1; for(i=0;i<MAX;i++) { p->next[i]=NULL; } return p; } /*插入*/ void InsertTrie(TrieNode* *pRoot,char *s) { int i,k; TrieNode*p; if(!(p=*pRoot)) { p=*pRoot=CreateTrieNode(); } i=0; while(s[i]) { k=s[i++]-'a';//确定branch if(!p->next[k]) p->next[k]=CreateTrieNode(); else p->next[k]->nCount++; p=p->next[k]; } } //查找 int SearchTrie(TrieNode* *pRoot,char *s) { TrieNode *p; int i,k; if(!(p=*pRoot)) { return 0; } i=0; while(s[i]) { k=s[i++]-'a'; if(p->next[k]==NULL) return 0; p=p->next[k]; } return p->nCount; } int main() { char name[100]={0}; TrieNode *root; InitTrieRoot(&root); //初始化树根 do { scanf("%s", name); InsertTrie(&root,name); }while(strcmp(name,"bye")!=0); //输入"Bye"结束插入 do { scanf("%s", name); printf("found %d of it!\n",SearchTrie(&root,name)); }while( strcmp(name,"bye")!=0); //输入"Bye"结束查找 return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY