#include<stdio.h>
#include<stdlib.h>
struct stackarr;
typedef struct stackarr * Stack;
struct stackarr
{
int Capacity;
int TopOfStack;
int *Array;
};
void MakeEmpty(Stack s)
{
s->TopOfStack = -1;
}
Stack CreateStack(int MaxElements)
{
Stack s;
s = (struct stackarr*) malloc(sizeof(struct stackarr));
s->Array = (int *)malloc(sizeof(int) * MaxElements);
s->Capacity = MaxElements;
MakeEmpty(s);
return s;
}
void DisposeStack(Stack s)
{
if(s != NULL)
{
free(s->Array);
free(s);
}
}
int isFull(Stack s)
{
return s->TopOfStack == s->Capacity - 1;
}
int isEmpty(Stack s)
{
return s->TopOfStack == -1;
}
void Push(int x, Stack s)
{
if(isFull(s))
printf("Full Stack\n\n");
else
s->Array[++s->TopOfStack] = x;
}
void Pop(Stack s)
{
if(isEmpty(s))
printf("Empty Stack\n\n");
else
s->TopOfStack--;
}
int Top(Stack s)
{
if(isEmpty(s))
printf("Empty Stack\n\n");
else
return s->Array[s->TopOfStack];
}
int TopAndPop(Stack s)
{
if(isEmpty(s))
printf("Empty Stack\n\n");
else
return s->Array[s->TopOfStack--];
}
void Display(Stack s)
{
int i;
if(isEmpty(s))
printf("Empty Stack\n\n");
else
{
printf("The Stack Elements are :: ");
for(i=s->TopOfStack; i >= 0; i--)
printf("%d ",s->Array[i]);
printf("\n\n");
}
}
void main()
{
int n, x, ch, i;
Stack s;
printf("Enter the maximum number of elements in the stack :: ");
scanf("%d", &n);
s = CreateStack(n);
printf("ARRAY IMPLEMENTATION OF STACK ADT\n\n");
do
{
printf("\n\n1. PUSH\t 2. POP\t 3.TOP \t 4. TOPANDPOP\t 5. PRINT\t 6. QUIT\n\nEnter the choice :: ");
scanf("%d", &ch);
switch(ch)
{
case 1:
printf("Enter the element to be pushed :: ");
scanf("%d",&x);
Push(x,s);
break;
case 2:
Pop(s);
break;
case 3:
printf("The Top element in the stack :: %d\n\n", Top(s));
break;
case 4:
printf("The popped top element in the stack :: %d\n\n", TopAndPop(s));
break;
case 5:
Display(s);
break;
}
}while(ch<6);
DisposeStack(s);
return 0;
}
OUTPUT:
Enter the maximum number of elements in the stack :: 5
ARRAY IMPLEMENTATION OF STACK ADT
1. PUSH 2. POP 3.TOP 4. TOPANDPOP 5. PRINT 6. QUIT
Enter the choice :: 1
Enter the element to be pushed :: 10
1. PUSH 2. POP 3.TOP 4. TOPANDPOP 5. PRINT 6. QUIT
Enter the choice :: 1
Enter the element to be pushed :: 20
1. PUSH 2. POP 3.TOP 4. TOPANDPOP 5. PRINT 6. QUIT
Enter the choice :: 1
Enter the element to be pushed :: 30
1. PUSH 2. POP 3.TOP 4. TOPANDPOP 5. PRINT 6. QUIT
Enter the choice :: 5
The Stack Elements are :: 30 20 10
1. PUSH 2. POP 3.TOP 4. TOPANDPOP 5. PRINT 6. QUIT
Enter the choice :: 2
1. PUSH 2. POP 3.TOP 4. TOPANDPOP 5. PRINT 6. QUIT
Enter the choice :: 5
The Stack Elements are :: 20 10
1. PUSH 2. POP 3.TOP 4. TOPANDPOP 5. PRINT 6. QUIT
Enter the choice ::