首页 > 其他 > 详细

字典树

时间:2014-08-13 18:04:06      阅读:277      评论:0      收藏:0      [点我收藏+]
[syswj@host 0813]$ cat dic_tree.cpp 
#include <iostream>
#include <stdio.h>

#define MAX 26
using namespace std;

typedef struct TrieNode
{
    int ncount;
    struct TrieNode *next[MAX];
}TrieNode;

void init(TrieNode **pRoot)//初始化
{
    *pRoot = NULL;
}

TrieNode* create()//创建新节点
{
    TrieNode *a = new TrieNode;
    a->ncount = 0;
    for(int i = 0; i < MAX; ++i)
        a->next[i] = NULL;
    return a;
}

void insert(TrieNode **pRoot, char *s)//插入
{
    int i, k;
    TrieNode *p;
    if(!(p = *pRoot))
    {
        p = *pRoot = create();
    }
    i = 0;
    while(s[i])
    {
        k = s[i++] - ‘a‘;
        if(!p->next[k])
        {
            p->next[k] = create();
        }
        p = p->next[k];
    }
    p->ncount++;
}

int search(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(int argc, const char *argv[])
{
  TrieNode *p;
  init(&p);
  char a[20] = {"abc"} ;
  insert(&p, a);
  insert(&p, a);
  insert(&p,"bcd");
  insert(&p,a);
  cout << search(p,a) << endl;
  cout << search(p,"bcd") << endl;
    return 0;
}

 

字典树,布布扣,bubuko.com

字典树

原文:http://www.cnblogs.com/wj9012/p/3910273.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!