#define LIMIT 50
typedef struct
{
int n;
int i;
int a;
int f;
}whatever;
typedef struct
{
whatever info;
}stackrecord;
typedef struct
{
stackrecord stackarray [LIMIT];
int top;
}stack;
setstack(ps)
/* Initializes the stack s to empty */
stack *ps;
{
(*ps).top = -1;
}
empty(ps)
/* Returns true only if the stack s is empty */
stack *ps;
{
return((*ps).top == -1);
}
push(pnewrecord,ps)
/* Inserts the record newrecord
at the top of the stack s
*/
stackrecord *pnewrecord;
stack *ps;
{
if ((*ps).top == (LIMIT-1))
overflow(ps);
else
{
(*ps).top = (*ps).top + 1;
(*ps).stackarray[(*ps).top].info =
(*pnewrecord).info;
}
}
pop(ps,pvalue)
/* Copies the contents of the top record
of stack s into value and removes the
record from the stack
*/
stack *ps;
stackrecord *pvalue;
{
if (empty(ps))
underflow(ps);
else
{
(*pvalue).info =
(*ps).stackarray[(*ps).top].info;
(*ps).top = (*ps).top - 1;
}
}
overflow(ps);
/* Prints a message that the stack has overflowed */
stack *ps;
{
printf(" The stack has overflowed \n");
}
underflow(ps);
/* Prints a message that the stack has underflowed */
stack *ps;
{
printf(" The stack has underflowed \n");
}