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;       
    }
  • 相关阅读:
    sql语句中的通配符
    Q&A 20090922
    Web大文件上传
    作别2010, 迎来2011的第一个工作日
    .Net 中 获取当前应用程序启动目录的几个方法
    asp.net身份验证和使用Silverlight的问题
    常用正则表达式
    最完美的xslt数值函数与字符串函数
    SQL2005的分页存储过程,支持多表多关联,亲测高效绝对可用
    处理大并发下的dropdownlist数据关联
  • 原文地址:https://www.cnblogs.com/10jschen/p/2644976.html
Copyright © 2011-2022 走看看