Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- GENERIC MODULE StackArray(Elem);
- REVEAL T = BRANDED REF RECORD
- Top:INTEGER := -1;
- Capacity:CARDINAL := 0;
- Data:REF ARRAY OF Elem.T := NIL;
- END;
- PROCEDURE Create(READONLY Capacity:CARDINAL := 5):T =
- BEGIN
- RETURN NEW(T,
- Capacity := Capacity,
- Top := -1,
- Data := NEW(REF ARRAY OF Elem.T,Capacity))
- END Create;
- (*
- TC = O(1)
- SC = O(1)
- *)
- PROCEDURE IsFull(VAR Stack:T):BOOLEAN =
- BEGIN
- RETURN Stack.Top = Stack.Capacity - 1
- END IsFull;
- (*
- TC = O(1)
- SC = O(1)
- *)
- PROCEDURE IsEmpty(VAR Stack:T):BOOLEAN =
- BEGIN
- RETURN Stack.Top = -1
- END IsEmpty;
- (*
- TC = O(1)
- SC = O(1)
- *)
- PROCEDURE Push(VAR Stack:T;Data:Elem.T) RAISES{StackFull} =
- BEGIN
- IF IsFull(Stack) THEN RAISE StackFull END;
- INC(Stack.Top);
- Stack.Data[Stack.Top] := Data
- END Push;
- (*
- TC = O(1)
- SC = O(1)
- *)
- PROCEDURE Pop(VAR Stack:T):Elem.T RAISES{StackEmpty} =
- BEGIN
- IF IsEmpty(Stack) THEN RAISE StackEmpty END;
- DEC(Stack.Top);
- RETURN Stack.Data[Stack.Top+1]
- END Pop;
- (*
- TC = O(1)
- SC = O(1)
- *)
- PROCEDURE Peek(VAR Stack:T):Elem.T RAISES{StackEmpty} =
- BEGIN
- IF IsEmpty(Stack) THEN RAISE StackEmpty END;
- RETURN Stack.Data[Stack.Top]
- END Peek;
- BEGIN
- END StackArray.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement