home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c072 / 1.ddi / PRG4_2C.C < prev    next >
Encoding:
C/C++ Source or Header  |  1987-09-19  |  2.0 KB  |  80 lines

  1. /*Program 4_2c - Sort IRS data
  2.    by Stephen R. Davis, 1987
  3.  
  4.   Define an insert() and remove() functions which account for the
  5.   boundary conditions inherent in a HEAD/TAIL implimentation.
  6. */
  7.  
  8. #include <stdio.h>
  9. #define NULL (struct IRSdata *)0
  10.  
  11. struct IRSdata{
  12.                struct IRSdata *previous,*next;
  13.                char lastname [11];
  14.                char firstname [11];
  15.                char sex;
  16.                struct {
  17.                        char street [16];
  18.                        char city [11];
  19.                        char state [3];
  20.                       } address;
  21.                char ssnum [10];
  22.                int taxrate;
  23.               };
  24. struct IRSdata *HEAD, *TAIL;
  25.  
  26.  
  27. /*Insert - insert a structure in between two doubly linked entries.
  28.            Return a 0 if successful, and a nonzero if not*/
  29. insert (before, after, current)
  30.     struct IRSdata *before, *after, *current;
  31. {
  32.     if (before -> next != after) return -1;
  33.     if (before != after -> previous) return -1;
  34.  
  35.     if (before != NULL) {
  36.          before -> next = current;
  37.          current -> previous = before;
  38.     } else {
  39.          HEAD = current;
  40.          current -> previous = NULL;
  41.     }
  42.  
  43.     if (after != NULL) {
  44.          after -> previous = current;
  45.          current -> next = after;
  46.     } else {
  47.          TAIL = current;
  48.          current -> next = NULL;
  49.     }
  50.  
  51.     return 0;
  52. }
  53.  
  54. /*Remove - remove an entry from a doubly linked list*/
  55. remove (entry)
  56.     struct IRSdata *entry;
  57. {
  58.     struct IRSdata *before, *after;
  59.  
  60.     before = entry -> previous;
  61.     after = entry -> next;
  62.  
  63.     if (before != NULL)
  64.          if (after != NULL) {
  65.               before -> next = after;
  66.               after -> previous = before;
  67.          } else {
  68.               before -> next = NULL;
  69.               TAIL = before;
  70.          }
  71.     else
  72.          if (after != NULL) {
  73.               HEAD = after;
  74.               after -> previous = NULL;
  75.          } else
  76.               HEAD = TAIL = NULL;
  77.  
  78.     entry -> previous = entry -> next = NULL;
  79. }
  80.