home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9101 / parser / fifoqueu.pas next >
Encoding:
Pascal/Delphi Source File  |  1991-09-12  |  2.3 KB  |  78 lines

  1. (* ------------------------------------------------------ *)
  2. (*                     FIFOQUEU.PAS                       *)
  3. (*     enthält die Funktionen zur Realisation einer       *)
  4. (*     dynamischen Warteschlange                          *)
  5. (*        (c) 1991 Andreas Tengicki & DMV-Verlag          *)
  6. (* ------------------------------------------------------ *)
  7. UNIT FiFoQueu;
  8.  
  9. INTERFACE
  10.  
  11. TYPE
  12.   FiFo_Element  = RECORD
  13.                     Satz  : STRING;
  14.                     Last  : STRING;
  15.                     Count : INTEGER;
  16.                   END;
  17.  
  18.   FiFo_Satz_Ptr = ^FiFo_Satz;
  19.   FiFo_Satz     = RECORD
  20.                     Wert : FiFo_Element;
  21.                     Next : FiFo_Satz_Ptr;
  22.                   END;
  23.  
  24.   (* --- Dynamische Version ----------------------------- *)
  25.  
  26.   PROCEDURE FiFo_Init_d(VAR Inp, Out : FiFo_Satz_Ptr);
  27.   PROCEDURE FiFo_In_d  (VAR Inp, Out : FiFo_Satz_Ptr;
  28.                             Element  : FiFo_Element);
  29.   PROCEDURE FiFo_Out_d (VAR Inp, Out : FiFo_Satz_Ptr;
  30.                         VAR Element  : FiFo_Element);
  31.  
  32. IMPLEMENTATION
  33.  
  34.   PROCEDURE FiFo_Init_d(VAR Inp, Out : FiFo_Satz_Ptr);
  35.     (* initialisiert die dynamische FIFO-Schlange *)
  36.   BEGIN
  37.     Inp := NIL;
  38.     Out := NIL;
  39.   END;
  40.  
  41.   PROCEDURE FiFo_In_d(VAR Inp, Out : FiFo_Satz_Ptr;
  42.                           Element  : FiFo_Element);
  43.     (* fügt ein Element in die dyn. FIFO-Schlange *)
  44.   VAR
  45.     h : FiFo_Satz_Ptr;
  46.   BEGIN
  47.     h := Inp;
  48.     New(Inp);
  49.     Inp^.Wert := Element;
  50.     Inp^.Next := NIL;
  51.     IF h = NIL THEN
  52.       Out := Inp        { 1.Element }
  53.     ELSE
  54.       h^.Next := Inp;   { sonst ... }
  55.   END;
  56.  
  57.   PROCEDURE FiFo_Out_d(VAR Inp, Out : FiFo_Satz_Ptr;
  58.                        VAR Element  : FiFo_Element);
  59.     (* löscht ein Element aus der dyn. FIFO-Schl. *)
  60.   VAR
  61.     h : FiFo_Satz_Ptr;
  62.   BEGIN
  63.     IF Out = NIL THEN BEGIN          { leere Warteschlange }
  64.       WriteLn('Fehler in der Warteschlange.');
  65.       Halt;
  66.     END ELSE BEGIN
  67.       Element := Out^.Wert;
  68.       h       := Out;
  69.       Out     := Out^.Next;
  70.       Dispose(h);
  71.       IF Out = NIL THEN Inp := NIL;  { letztes Element }
  72.     END;
  73.   END;
  74.  
  75. END.
  76. (* ------------------------------------------------------ *)
  77. (*              Ende von FIFOQUEU.PAS                     *)
  78.