unit Schlange;

interface
  type tZeiger =^tElement;

       tElement = record
         inhalt : string;
         zNaechster : tZeiger;
         end;

       tSchlange = record
         zKopf,zEnde : tZeiger;
         end;

  procedure erzeuge (var schlange:tSchlange);
  function leer (var schlange:tSchlange) : boolean;
  function kopf (var schlange:tSchlange) : string;
  procedure hintendran (var schlange:tSchlange; x:string);
  procedure reduziere (var schlange:tSchlange);

implementation

    procedure erzeuge (var Schlange:tSchlange);
      begin
        Schlange.zKopf := NIL;
        Schlange.zEnde := NIL;
      end;

    function leer (var Schlange:tSchlange) : boolean;
      begin
        if (Schlange.zKopf = NIL)
          then
            leer := true
          else
            leer := false;
      end;

  function kopf (var Schlange:tSchlange) : string;
    begin
      kopf := Schlange.zKopf.inhalt;
    end;

  procedure hintendran (var schlange:tSchlange; x:string);
      var neu : tZeiger;
    begin
      new(neu);
      neu.inhalt := x;
      neu.zNaechster := NIL;

      Schlange.zEnde.zNaechster := neu;
      Schlange.zEnde := neu;
    end;

  procedure reduziere (var schlange:tSchlange);
      var tmp : tZeiger;
    begin
      tmp := Schlange.zKopf.zNaechster;
      dispose(Schlange.zKopf);
      Schlange.zKopf := tmp;
    end;
end.
