Advertisement
deadmarshal

Untitled

Jul 3rd, 2025
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. GENERIC MODULE StackArray(Elem);
  2.  
  3. REVEAL T = BRANDED REF RECORD
  4.   Top:INTEGER := -1;
  5.   Capacity:CARDINAL := 0;
  6.   Data:REF ARRAY OF Elem.T := NIL;
  7. END;
  8.  
  9. PROCEDURE Create(READONLY Capacity:CARDINAL := 5):T =
  10.   BEGIN
  11.     RETURN NEW(T,
  12.                Capacity := Capacity,
  13.                Top := -1,
  14.                Data := NEW(REF ARRAY OF Elem.T,Capacity))
  15.   END Create;
  16.  
  17. (*
  18.   TC = O(1)
  19.   SC = O(1)
  20. *)
  21. PROCEDURE IsFull(VAR Stack:T):BOOLEAN =
  22.   BEGIN
  23.     RETURN Stack.Top = Stack.Capacity - 1
  24.   END IsFull;
  25.  
  26. (*
  27.   TC = O(1)
  28.   SC = O(1)
  29. *)
  30. PROCEDURE IsEmpty(VAR Stack:T):BOOLEAN =
  31.   BEGIN
  32.     RETURN Stack.Top = -1
  33.   END IsEmpty;
  34.  
  35. (*
  36.   TC = O(1)
  37.   SC = O(1)
  38. *)
  39. PROCEDURE Push(VAR Stack:T;Data:Elem.T) RAISES{StackFull} =
  40.   BEGIN
  41.     IF IsFull(Stack) THEN RAISE StackFull END;
  42.     INC(Stack.Top);
  43.     Stack.Data[Stack.Top] := Data
  44.   END Push;
  45.  
  46. (*
  47.   TC = O(1)
  48.   SC = O(1)
  49. *)
  50. PROCEDURE Pop(VAR Stack:T):Elem.T RAISES{StackEmpty} =
  51.   BEGIN
  52.     IF IsEmpty(Stack) THEN RAISE StackEmpty END;
  53.     DEC(Stack.Top);
  54.     RETURN Stack.Data[Stack.Top+1]
  55.   END Pop;
  56.  
  57. (*
  58.   TC = O(1)
  59.   SC = O(1)
  60. *)
  61. PROCEDURE Peek(VAR Stack:T):Elem.T RAISES{StackEmpty} =
  62.   BEGIN
  63.     IF IsEmpty(Stack) THEN RAISE StackEmpty END;
  64.     RETURN Stack.Data[Stack.Top]
  65.   END Peek;
  66.  
  67. BEGIN
  68.  
  69. END StackArray.
  70.  
  71.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement