home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_09_03 / 9n03121a < prev    next >
Text File  |  1991-01-16  |  1KB  |  65 lines

  1.  
  2. /*
  3.  * xrt.cpp - cross-reference table implementation
  4.  */
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8.  
  9. #include "ln_seq.h"
  10. #include "xrt.h"
  11.  
  12. struct treenode
  13.     {
  14.     char *word;
  15.     ln_seq lines;
  16.     treenode *left, *right;
  17.     };
  18.  
  19. static treenode *addtree
  20.         (treenode *t, char *w, unsigned n)
  21.     {
  22.     int cond;
  23.  
  24.     if (t == NULL)
  25.         {
  26.         t = new treenode;
  27.         t->word
  28.             = strcpy((char *)malloc(strlen(w) + 1), w);
  29.         t->lines.add(n);
  30.         t->left = t->right = NULL;
  31.         }
  32.     else if ((cond = strcmp(w, t->word)) == 0)
  33.         t->lines.add(n);
  34.     else if (cond < 0)
  35.         t->left = addtree(t->left, w, n);
  36.     else
  37.         t->right = addtree(t->right, w, n);
  38.     return t;
  39.     }
  40.  
  41. static void printtree(treenode *t)
  42.     {
  43.     if (t != NULL)
  44.         {
  45.         printtree(t->left);
  46.         printf("%12s: ", t->word);
  47.         t->lines.print();
  48.         printf("\n");
  49.         printtree(t->right);
  50.         }
  51.     }
  52.  
  53. static treenode *root = NULL;
  54.  
  55. void xrt_add(char *w, unsigned n)
  56.     {
  57.     root = addtree(root, w, n);
  58.     }
  59.  
  60. void xrt_print(void)
  61.     {
  62.     printtree(root);
  63.     }
  64.  
  65.