字典树的操作

来源:互联网 发布:visual studio for mac 编辑:程序博客网 时间:2024/05/20 15:37
#include <iostream>#include <cstdlib>#include <string>using namespace std;#define MAX 26typedef struct _Trie{  int num;  struct _Trie *next[MAX];}Trie,*PTrie;PTrie root;void InsertTrie(string str){int len=str.length();int i,j,pos;PTrie p=root;PTrie q;for(i=0;i<len;i++){  pos=str[i]-'a';  if(p->next[pos]==NULL)  {  q=(PTrie)malloc(sizeof(Trie));  q->num=1;  for(int j=0;j<MAX;j++)  {  q->next[j]=NULL;  }  p->next[pos]=q;  p=p->next[pos];  }  else  {  p->next[pos]->num++;  p=p->next[pos];    }  }p->num=0;}//int FindTrie(string str){  int i,pos;  int len=str.length();  PTrie p=root,q;  for(i=0;i<len;i++)  {    pos=str[i]-'a';if(p->next[pos]==NULL){  return -1;//代表没有这样的前缀}else{p=p->next[pos];}  }  return p->num;}int main(){root=(PTrie)malloc(sizeof(Trie));root->num=1;for(int i=0;i<MAX;i++){root->next[i]=NULL;}string str1="abc";string str2="abcd";string str3="abd";string str4="b";string str5="bcd";string str6="efg";string hig="hig";InsertTrie(str1);InsertTrie(str2);InsertTrie(str3);InsertTrie(str4);InsertTrie(str5);InsertTrie(str6);if(FindTrie("ab")==-1)cout<<"没有以这个为前缀的字符串"<<endl;elsecout<<"以这个子串为前缀的字符串个数为"<<FindTrie("ab")<<endl; return 0;}

0 0
原创粉丝点击