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;       
    }
  • 相关阅读:
    HTML_表单
    jabc_DAO
    JDBC 加钱减钱
    JDBC 连接池
    JDBC
    视图序列索引
    【Java8】 lambda 特性讲解
    IntelliJ IDEA 常用快捷键
    Java IO 之 装饰模式
    Java IO 讲解
  • 原文地址:https://www.cnblogs.com/10jschen/p/2644976.html
Copyright © 2011-2022 走看看