home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 446.lha / avlsort / avl.h < prev    next >
C/C++ Source or Header  |  1990-12-02  |  3KB  |  89 lines

  1. /*    avl.h        Definitions for avl routines
  2.  
  3.     Copyright 1988 Zinn Computer Company
  4.     by Mark E. Mallett
  5.     All Rights Reserved
  6.  
  7.     This software may be used at will, provided that all credits
  8.     and style be left in place, and that its distribution is not
  9.     restricted. Bug fixes and improvements are welcomed, please
  10.     send these back to me at mem@zinn.MV.COM
  11. */
  12.  
  13. #ifndef    H_AVL                /* Prevent multiple inclusions */
  14. #define    H_AVL
  15.  
  16.     /*--------------------------------------------------------------
  17.      * rlp900624 -- Support for Lattice-style prototypes
  18.      *    If MSDOS, I assume Microsoft C compiler for DOS and OS/2
  19.      *    If Lattice, I assume Lattice C compiler for Amiga
  20.      *--------------------------------------------------------------
  21.      */
  22.  
  23. #ifndef __ARGS
  24.  #if    defined(MSDOS) || defined(LATTICE)
  25.   #define __ARGS(a) a
  26.  #else
  27.   #define __ARGS(a) ()
  28.  #endif
  29. #endif
  30.  
  31. #ifndef    TRUE                /* Same old jazz */
  32. #define    TRUE    1
  33. #define    FALSE    0
  34. #endif    TRUE
  35.  
  36. #ifndef    NULL
  37. #define    NULL    ((char *)0)
  38. #endif    NULL
  39.  
  40. #ifndef    NUL
  41. #define    NUL    '\0'
  42. #endif    NUL
  43.  
  44.     /*-------------------------------------------
  45.      * rlp900624 -- added typedefs and prototypes
  46.      *-------------------------------------------
  47.      */
  48.  
  49.     typedef    struct _AVLNODE    AVLNODE;
  50.     typedef    struct _AVLTREE    AVLTREE;
  51.  
  52.     typedef    int    (*PFNCMPRTC)  __ARGS((void *, AVLNODE *));
  53.     typedef    AVLNODE    *(*PFNMKNODE) __ARGS((AVLTREE *, void *, void *, AVLNODE *));
  54.     typedef    int    (*PFNRMNODE)  __ARGS((AVLTREE *, AVLNODE *));
  55.  
  56.     AVLNODE    *avlfind  __ARGS(( AVLTREE *treeP, void *keyP ));
  57.     int    avlinsert __ARGS(( AVLTREE *treeP, void *keyP, void *dataP ));
  58.     int    avldelete __ARGS(( AVLTREE *treeP, void *keyP ));
  59.  
  60.     /* Structures */
  61.  
  62. /* Structure of an avl tree node.  Note that this node is meant to
  63.    be used as a header or component of an application-specific structure,
  64.    since there is no key or data information present in the avlnode
  65.    structure.
  66. */
  67.  
  68. typedef                    /* A node in an AVL tree */
  69.   struct _AVLNODE {
  70.     AVLNODE    *n_leftP;        /* Ptr to left subtree */
  71.     AVLNODE    *n_rightP;        /* Ptr to right subtree */
  72.     int        n_balance;        /* Balance count */
  73.   } AVLNODE;
  74.  
  75. typedef                    /* The header for an AVL tree */
  76.   struct _AVLTREE {
  77.     /* Tree parameters */
  78.     AVLNODE    *t_rootP;        /* Ptr to root node */
  79.  
  80.     /* Handler functions for the tree */
  81.     /* rlp900622 -- use my typedefs for these function ptrs */
  82.  
  83.     PFNCMPRTC t_cmprtc;        /* int    (*t_cmprtc)();  Compare two keys */
  84.     PFNMKNODE t_mknode;        /* AVLNODE *(*t_mknode)();  Node maker       */
  85.     PFNRMNODE t_rmnode;        /* int    (*t_rmnode)();  Node destroyer   */
  86.   } AVLTREE;
  87.  
  88. #endif    H_AVL;
  89.