Advertisement
Ladies_Man

#ARCH_2 Standard_Trie

Oct 7th, 2014
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.41 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define ALPHA_SIZE 26
  6.  
  7. struct vertex {
  8.     char *v;
  9.     struct vertex *parent, *arcs[ALPHA_SIZE];
  10. } *t;
  11.  
  12. int m;
  13.  
  14. struct vertex *InitTrie()
  15. {
  16.     struct vertex *x;
  17.     int i;
  18.     x = (struct vertex*)malloc(sizeof(struct vertex));
  19.     for (i = 0; i < ALPHA_SIZE; i++)
  20.         x->arcs[i] = NULL;
  21.     x->v = NULL;
  22.     return x;
  23. }
  24.  
  25. struct vertex *Descend(char *k)
  26. {
  27.     int len = strlen(k);
  28.     struct vertex *x, *y;
  29.     x = t;
  30.     m = 0;
  31.     while (m < len) {
  32.         y = x->arcs[k[m]'a'];
  33.         if (0 == y) break;
  34.         x = y; m++;
  35.     }
  36.     return x;
  37. }
  38.  
  39. void Delete (char *k)
  40. {
  41.     struct vertex *x;
  42.     x = Descend(k);
  43.     x->v = NULL;
  44. }
  45.  
  46. void Lookup (char *k)
  47. {
  48.     int i, len = strlen(k);
  49.     struct vertex *x;
  50.     x = Descend(k);
  51.     i = m;
  52.     if (x->v == NULL)
  53.         printf("element does not exist\n");
  54.     printf("%s\n", x->v);
  55. }
  56.  
  57. void Insert (char *k, char *value)
  58. {
  59.     int i, len = strlen(k);
  60.     struct vertex *x, *y;
  61.     x = Descend(k);
  62.     x->v = value;
  63. }
  64.  
  65. int main()
  66. {
  67.     int i, n;
  68.     char command[10], str[100], value[100];
  69.     struct vertex *x;
  70.     t = InitTrie();
  71.     scanf("%d", &n);
  72.     for (i = 0; i < n; i++) {
  73.         scanf("%s", command);
  74.         if ('i' == command[0]) { //insert
  75.             scanf("%s%s", str, value);
  76.             Insert(str, value);
  77.         }
  78.         if ('d' == command[0]) { //delete
  79.             scanf("%s", str); Delete(str);
  80.         }
  81.         if ('l' == command[0]) { //lookup
  82.             scanf("%s", str); Lookup(str);
  83.         }
  84.     }
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement