#include<stdio.h>
#include<stdlib.h>
#include"ex2_stack.h"

#define INIT_SZ  2

void init_stack(struct stack * s)
{
   s->size=0;
   s->data  = (int *)malloc(sizeof(int)*INIT_SZ);
   s->cap=INIT_SZ;
}

void push(struct stack * s, int data)
{
   if (s->size == s->cap) {
      int next_size = 2*s->cap;
      int * tmp = realloc(s->data,next_size*sizeof(int));
      if(tmp == NULL) {
         printf ("Remove items\n"); 
         return;
      } else {
         s->cap=s->cap*2;
         printf(" *** Capacity of stack increased to %d ... \n",s->cap);
         s->data = tmp;
      }
    }
    s->data[s->size]=data;
	 s->size++;
    return;
}

int pop(struct stack * s)
{
   int i = s->data[s->size-1];
   s->size--;
   return i;
}


void print_stack(const struct stack * s)
{
   int i;

   if (s->size<=0)
     printf("\nEmpty Stack\n");
   else {
     printf("\nItems in Stack : ");
     for ( i=s->size-1; i>=0; i-- )
        printf(" %d ",s->data[i]);

     printf("\n\n");
   }
   return;
}
