Dynamic Stack

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct dyna_stack
{
    void *data;
    struct dyna_stack* down;
};
struct dyna_stack* top=NULL;

enum type_t{
  INT,
  CHAR,
  STRING,
  FLOAT
};

void push(enum type_t t,void* data)
{
      size_t size;
        switch(t)
       {
           case INT:
           {  int *i = (int*) data;
             size= sizeof(int);
           break;
           }
           case CHAR:
           {    
             char* c = (char*) data;
             size= sizeof(char);
           break;
           }
           case STRING:
           {
             char* s = (char *) data;
             size= strlen(s);
           break;
           }
           case FLOAT:
           {
                float* f = (float*) data;
             size = sizeof(float);
           break;
           }
       }
    if(top == NULL)
    {

        struct dyna_stack* ptr = (struct dyna_stack*) malloc(sizeof(struct dyna_stack));
         ptr->data = malloc(size);
         memcpy(ptr->data,data,size);
         ptr->down = NULL;
         top=ptr;
    }
    else
    {
      
        struct dyna_stack* ptr = (struct dyna_stack*) malloc(sizeof(struct dyna_stack));
         ptr->data = malloc(size);
         memcpy(ptr->data,data,size);
         ptr->down = top;
         top = ptr;
    }
}
void* pop(enum type_t t)
{
    void *temp;
    struct dyna_stack* ptr;
    size_t size;
    if(top == NULL)
    {
        printf("Underflow\n");
        return;
    }     
    else
    {
         switch(t)
       {
           case INT:
           {int *i = (int*) top->data;
             size= sizeof(int);
           break;
           }
           case CHAR:
          {  char* c = (char*) top->data;
             size= sizeof(char);
           break;
          }
           case STRING:
           {  char* s = (char *) top->data;
             size= sizeof(s);
           break;
           }
           case FLOAT:
           { float* f = (float*) top->data;
             size = sizeof(float);
             break;
           }
       }
        
        temp = malloc(size);
        memcpy(temp,top->data,size);
        free(top->data);
        ptr = top;
        top = top->down;
        
        free(ptr);
    }
    return temp;
}
int main()
{  int a[5]={1,2,3,4,5};
   push(INT,&a[0]);
   push(INT,&a[1]);
   push(INT,&a[2]);
   printf("%d\n", *(int*)pop(INT));
   printf("%d\n", *(int*)pop(INT));
   printf("%d\n", *(int*)pop(INT));
   printf("%d\n", *(int*)pop(INT));
}

Comments