implementation of a stack in C Below is my implementation of a stack in C. Is it correct? And/or is there anything that I should fix to make it better in any way?

stack.h

#ifndef STACK_H
#define STACK_H

#define EMPTY_STACK -1
typedef struct stack
{
  char ch;
  struct stack* prev;
} Stack;

extern Stack* init_stack(void);
extern char pop(Stack*);
extern void push(Stack*, char);

#endif


stack.c

#include "stack.h"
#include "stdlib.h"

Stack* init_stack()
{
  Stack* ret = (struct stack*)malloc(sizeof(struct stack));
  ret-&gt;prev = NULL;
  return ret;
}

char pop (Stack* stck)
{
  char ret;
  if (stck-&gt;prev)
  {
    ret = stck-&gt;ch;
    Stack* prv = stck-&gt;prev;
    stck-&gt;prev = prv-&gt;prev;
    stck-&gt;ch = prv-&gt;ch;
    free(prv);
    return ret;
  }
  else
    return EMPTY_STACK;
}

void push (Stack* stck, char ch)
{
  Stack* new_nd = (struct stack*)malloc(sizeof(struct stack));

  new_nd-&gt;prev = stck-&gt;prev;
  new_nd-&gt;ch = stck-&gt;ch;

  stck-&gt;prev = new_nd;
  stck-&gt;ch = ch;
}


Thanks!
I would advise you not implementing stacks with a linked list because for each char of info you consume 2 * sizeof(void*) because of memory alignment in your struct.  

Because of this you won't be able to handle a big amount of data.

What happens if you push EMPTY_STACK ? Your pop will return a false EMPTY_STACK when going through the if. Isn't there a better way to handle this ?