zoukankan      html  css  js  c++  java
  • 字典树模板

    结构:

    struct node
    {
        int flag;
        node *next[27];
    }*head;

    生成节点:

    /*动态分配内存*/
    node * newnode()
    {
        int i;
        node * p = new node;    // c语言用(node * )malloc(sizeof(node), 这里是动态分配内存,时间上可能消耗的多一些
        p->flag = 0;
        for(i = 0; i < 26; i++)
            p->next[i] = NULL;
        return p;
    }
     
    /*静态分配内存*/
    node T[1000000];
    int t = 0;
    node * newnode()
    {
        int i;
        node * p = &T[t++]; 
        p->flag = 0;
        for(i = 0; i < 26; i++)
            p->next[i] = NULL;
        return p;
    }
     
    注意:
    1:在此之前head一定要先分配,否则无法执行,这里自己老是出错。
    2:还有如果处理多组数据的话一定要注意清空T[]数组,否则影响后边的处理。

    插入操作:

    void insert(char *s)
    {
        int i,k;
        int len = strlen(s);
        node *p = head;
        for (i = 0; i < len; ++i)
        {
            k = s[i] - 'a';
            if (p->next[k] == NULL)
            p->next[k] = newnode();
            p = p->next[k];
        }
        p->flag = 1;
    }

    查找操作:

    bool search(char *s)
    {
        int i,k;
        int len = strlen(s);
        node *p = head;
        for (i = 0; i < len; ++i)
        {
            k = s[i] - 'a';
            if (p->next[k]) p = p->next[k];
            else
            return false;
        }
        if (p->flag) return true;
        else return false;
    }

    程序完毕后释放内存函数:

    void del(node * p)
    {
        int i;
        if(p)                   //p不为空
        {
            for(i =0; i <26; i++)
                if(p->next[i])
                    del(p->next[i]);        //递归删除每一个p->next[]
        }
        free(p);
        p = NULL;       
    }
  • 相关阅读:
    angluar 判断后跳转加参数
    angular 返回上一页
    angular 组件跳转组件 并传参数
    angluar 表单提交时候报错
    angular 中获取select选中的值
    javascript
    将数据渲染到页面的方式:模版
    将数据渲染到页面的几种方式
    跨域
    ajax
  • 原文地址:https://www.cnblogs.com/10jschen/p/2644976.html
Copyright © 2011-2022 走看看