[comp.lang.c] Pascal --> C

daili@wasp.eng.ufl.edu (DaiLi) (02/08/91)

Greetings...

Could anybody out there translate the following pascal
stack implementation program into C?  thanks...
please email to me....

A sequential implementation of the ADT Stack in Pascal


const
	maxstack = maximum size of stack
type
	itemtype = desired type of stack item
	stack    = record
			Items : array [1..maxstack] of itemtype
			Top   : 0..maxstack
		   end
{Basic stack operations - sequential implementation:
	Create, IsEmpty, Push, Pop, and StackTop    }
{ ------------------------------------------------------
  Create: create an empty stack S.
  ------------------------------------------------------ }
Procedure Create(var S : stack);
begin
	S.Top : = 0
end;  

{ ------------------------------------------------------
  IsEmpty: Detemine if stack S is empty
  ------------------------------------------------------ }
function IsEmpty(S : stack)  : boolean;
begin
	IsEmpty := (S.Top<1)
end;

{ ------------------------------------------------------
  Push: Add newitem to stack S. The operation fails if the
  stack is full (has maxstack items). The flag success
  indicates whether the operation succeeded.
  ------------------------------------------------------ }
procedure Push(var S : stack; newitem : itemtype;
	       var success : boolean);
begin
	if S.Top = maxstack
	  then success := false
	else
	  begin
		S.Top := S.Top + 1;
		S.Items[S.Top] := newitem;
		success := true
	  end
end;

{ ------------------------------------------------------
  Pop: Remove from stack S the item that was most recently
  added. The operation fails if the stack is empty. The flag
  success indicates whether the operation succeeded.
  ------------------------------------------------------ }
procedure Pop(var S : stack; var success : boolean);
begin
	if S.Top <1
	  then success := false
	else
	  begin
		S.Top := S.Top - 1;
		success := true
	  end
end;

{ ------------------------------------------------------
  StackTop: Retrieve into getitem the item fro stack S that
  was most recently added, leaving S unchanged. The operation
  fails if the stack is empty. The flag success indicates 
  whether te operation succeeded.
  ------------------------------------------------------ }
procedure StackTop(S: stack; var getitem: itemtype;
		   var success : boolean);
begin
	if  S.Top < 1
	  then success := false
	else
	  begin
		getitem := S.Items[S.Top];
		success := true
	  end
end;