home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* CHSTACK.PAS *)
- (* ------------------------------------------------------ *)
- UNIT ChStack;
-
- INTERFACE
-
- TYPE
- ElTyp = CHAR;
- 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 CHSTACK.PAS *)
-