home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* REALSTACK.PAS *)
- (* ------------------------------------------------------ *)
- UNIT RealStck;
-
- INTERFACE
-
- TYPE
- ElTyp = REAL; (* Für die Anwendung UPN-Rechner *)
- Zeiger = ^Stack;
- Stack = RECORD
- Z : ElTyp;
- next : Zeiger
- END;
- KELLER = Zeiger;
-
- FUNCTION IstLeer(K : KELLER) : BOOLEAN;
- (* Ist TRUE, wenn der Stack leer ist *)
-
- PROCEDURE POP(VAR K : KELLER; VAR x : ElTyp);
- (* Entfernt - falls möglich - das oberste Element vom
- Keller und gibt es in x zurück. *)
-
- PROCEDURE PUSH(VAR K : KELLER; x : ElTyp);
- (* Legt das Element x auf den Stack. *)
-
- PROCEDURE StackInit(VAR K : KELLER);
- (* Initialisiert einen neuen - oder rigoros einen
- alten Keller. *)
-
- PROCEDURE TOP(K : KELLER; VAR oben : ElTyp);
- (* Zeigt - falls möglich - das oberste Element und
- stellt es über den Variablenparameter zur Verfügung. *)
-
-
- IMPLEMENTATION
-
- FUNCTION IstLeer(K : KELLER) : BOOLEAN;
- BEGIN
- IstLeer := (K = NIL);
- END;
-
- PROCEDURE StackInit(VAR K : KELLER);
- BEGIN
- K := NIL;
- END;
-
- PROCEDURE TOP(K : KELLER; VAR oben : ElTyp);
- BEGIN
- IF NOT IstLeer(K) THEN oben := K^.Z;
- END;
-
- PROCEDURE POP(VAR K : KELLER; VAR x : ElTyp);
- VAR
- Dummy : KELLER;
- BEGIN
- IF NOT IstLeer(K) THEN BEGIN
- x := K^.Z;
- Dummy := K;
- K := K^.next;
- DISPOSE(Dummy);
- END;
- END;
-
- PROCEDURE PUSH(VAR K : KELLER; x : ElTyp);
- VAR
- Dummy : KELLER;
- BEGIN
- NEW(Dummy);
- Dummy^.Z := x;
- Dummy^.next := K;
- K := Dummy;
- END;
-
- END.
- (* ------------------------------------------------------ *)
- (* Ende von REALSTCK.PAS *)