字典树使用规范

分为静态内存 和 动态内存的字典树

 静态内存不需要清空 oj也不会崩         

1.创建

静态内存申请

struct node
{
    node *nex[10];
    int flag;
};
node a[10000000];//动态内存会蹦
int top;//每次清0;
node *makeempty()//申请静态内存
{
    int i;
    node *root = &a[top++];
    root ->flag = 0;
    for(i=0; i<10; i++)
    {
        root->nex[i]=NULL;
    }
    return root;

}

上面的函数相当于 new node     把所有的new node 用函数代替 

2.动态内存的结构体

struct node
{
    node *nex[26];
    int flag;

    node()//执行函数
    {
        for(int i=0; i<26; i++)
        {
            nex[i] = NULL;
        }
        flag = 0;
    }
};

3.字典树插入函数

void creat(char s[],node *root)
{
    int len = strlen(s);
    node *now = root;

    for(int i=0; i<len; i++)
    {
        int to = s[i] - 'a';//第几个字母位置
        if(now->nex[to] == NULL)//如果这个位置没有字母 就新开一个
        {
            now -> nex[to] = makeempty();//这里改为静态
        }
        now = now -> nex[to];//指针移动
    }

    now->flag = 1;//标记结束
}

4.搜索函数

int search1(char s[],node *root)
{
    node *now = root;
    int len = strlen(s);

    for(int i=0; i<len; i++)
    {
        int to = s[i] - 'a';
        if(now->nex[to]==NULL)return 0;//没有节点直接结束
        now  = now->nex[to];
    }
    return now ->flag;//扫描到最后返回flag
}

5.如果动态内存的话 需要清内存

void dele(node *tmp)

{

    if(tmp==NULL)

        return;

    for(int i=0;i<26;++i)

        if(tmp->nex[i]!=NULL)

            dele(tmp->nex[i]);
    
    delete tmp;

    return;

}

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值