您的位置:首页 > 其它

字典树的操作

2016-01-02 20:09 267 查看
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
#define MAX 26
typedef 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;
else
cout<<"以这个子串为前缀的字符串个数为"<<FindTrie("ab")<<endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: