• Trie字典树 静态内存


    静态字典树 

    看了好久的字典树,挺简单的一个结构,愣是看了这么久才写出来。。。

    专心一点就不会这样了。。。。

    接下来就去刷刷字典树的题吧。。。。。。。

    下面是字典树。。。。

    定义节点

    typedef struct Trie{
    char val;  //其实这东西没啥软用。。。注释掉也一样。。。没有变化
    bool isword;
    struct Trie *next[26];
    }*Trie_pointer;

    然后建树

    这几天抽风了。。。

    把memset写在函数外面去了。。。。

    编译老半天过不去。。。。

    日了。。。。。。。

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define mem(a) memset(a,0,sizeof(a))
     4 #define long long ll;
     5 
     6 typedef struct Trie{
     7     char val;
     8     bool isword;
     9     struct Trie *next[26];
    10 }*Trie_pointer;
    11 
    12 Trie trie[200000];
    13 
    14 int tot;
    15 
    16 Trie_pointer CreateNode()
    17 {
    18     return &trie[tot++];
    19 }
    20 
    21 void Insert(Trie_pointer root, char *s)
    22 {
    23     if(*s == '')
    24         return;
    25     char *p = s;
    26     Trie_pointer tmp,t = root;
    27     while(*p != '')
    28     {
    29         if(t->next[*p - 'a'] == NULL)
    30         {
    31             tmp = CreateNode();
    32             tmp->val = *p;
    33             t->next[*p - 'a'] = tmp;
    34         }
    35         t = t->next[*p - 'a'];
    36         p++;
    37     }
    38     t->isword = 1;
    39 }
    40 
    41 bool Search(Trie_pointer root, char *s)
    42 {
    43     Trie_pointer tmp,t = root;
    44     if(*s == '')
    45         return false;
    46     while(*s != '')
    47     {
    48         if(t->next[*s - 'a'] ==NULL)
    49             return false;
    50         t = t->next[*s -'a'];
    51         s++;
    52     }
    53     if(t->isword == 0 )
    54         return false;
    55     return true;
    56 }
    57 
    58 int main()
    59 {
    60     Trie root;
    61     char s[20];
    62     int i,n;
    63     mem(trie,0,sizeof(trie));
    64     mem(&root,0,sizeof(root));
    65     cin>>n;
    66     for(i=1; i<=n; i++)
    67     {
    68         cin>>s;
    69        Insert(&root,s);
    70     }
    71     while(cin>>s)
    72     {
    73         bool flag = Search(&root,s);
    74         if(flag)
    75             printf("YES
    ");
    76         else
    77             printf("NO
    ");
    78     }
    79     return 0;
    80 }
  • 相关阅读:
    TMD 这个写笔记的号,盗了有意思吗
    类成员的指针必须NULL化,否则是乱七八糟的东西
    超前引用不可使用类名来定义变量和函数的变量参数,只可用来定义引用或者指针。
    XP下,移动窗口产生重影的问题
    生成ico格式图标
    设置窗口的z-order总是在最底部
    关于windows的锁定状态
    使用Layered Window遇到的一些问题及解决方法
    转-使用wifi调试程序
    URL的格式
  • 原文地址:https://www.cnblogs.com/max88888888/p/5869612.html
Copyright © 2020-2023  润新知