#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int *ptr;
int tos;
int size;
} stack;
void push(stack *sp, int data)
{
if(sp->tos == sp->size -1)
{
int*new_ptr = (int*)malloc(sizeof(int)*sp->size*2);
for(int i=0; i<sp->size; i++)
{
new_ptr[i] = sp->ptr[i];
}
free(sp->ptr);
sp->ptr = new_ptr;
sp->size *=2;
}
else
{
sp->tos ++;
sp->ptr[sp->tos] = data;
}
}
int pop(stack *sp)
{
if(sp->ptr[sp->tos] == -1)
printf("Stack is empty");
int data = sp->ptr[sp->tos];
sp->tos --;
return data;
}
int peek(stack *sp)
{
if(sp->ptr[sp->tos]= -1)
printf("Stack is empty");
else
{
int data = sp->ptr[sp->tos];
return data;
}
}
stack * create(int size)
{
stack *sp = (stack*)malloc(sizeof(stack));
sp->ptr = (int*) malloc(sizeof(int)*size);
sp->tos = -1;
sp->size = size;
}
int main()
{
stack *sp = create(5);
push(sp, 1);
push(sp, 2);
push(sp, 3);
push(sp, 4);
push(sp, 5);
printf("Stack Size : %d\n--------------\n",sp->size);
printf(" _____\n");
while(sp->tos > -1)
{
printf("|__%d__| \n",pop(sp));
}
}