Olá! Fiz uma pilha que cumpre a sua função Desempilhar normalmente, de cima para baixo. 
Agora estou tentando desempilhar essa mesma pilha só que de Baixo para Cima mas estou com dificuldades e gostaria da ajuda dos senhores. 
Agradeço desde já! 
Segue o Código: 
#include <stdio.h>
#include <stdlib.h>
struct Item
{
    int numero;
    struct Item *proximo;
};
void Inicializar(Item **topo)
{
   *topo = NULL;
}
bool EstaVazia(Item **topo)
{
   if(*topo == NULL)
      return true;
   else
      return false;
}
void Empilhar(Item **topo, int elemento)
{
    Item *novo;
    novo = (Item *)malloc(sizeof(Item));
    novo->numero = elemento;
    novo->proximo = *topo; // -> próximo recebe o elemento que estava no topo.
    *topo = novo;
}
int Desempilhar(Item **topo)
{
   int result;
   Item *auxiliar;
   if(EstaVazia(topo))
   {
        printf("\n stack underflow! \n");
        exit(1);
   }
   else // -> Elemento retirado do topo
   {
        result = (*topo)->numero;
        auxiliar = *topo;
        *topo = (*topo)->proximo;
        free(auxiliar);
        return result;
   }
}
void MostrarPilha(Item *topo)
{
    int i = 0;
    Item *item;
    printf("\n\n Listando...\n\n");
    printf("---------------------------------\n");
    if (EstaVazia(&topo))
    {
        printf ("A Pilha esta vazia!\n");
    }
    else
    {
        item = topo;
        while(item != NULL)
        {
            i++;
            printf("[%i] -> %i\n", i, item->numero);
            item = item->proximo;
        }
    }
    printf("---------------------------------\n");
}
void Menu()
{
    printf( "\n\nDigite a sua escolha: \n"
        "    1 empilhar elemento \n"
        "    2 desempilhar \n"
        "    3 para finalizar \n"
        "? ");
}
main()
{
    Item *topo = NULL;
    int opcao;
    int numero;
    Menu();
    scanf("%i", &opcao);
    while (opcao != 3)
    {
        switch (opcao)
        {
            case 1:
                printf( "Digite um numero: ");
                scanf("\n%i", &numero);
                Empilhar(&topo, numero);
                MostrarPilha(topo);
                break;
            case 2:
                numero = Desempilhar(&topo);
                printf( "\n Numero desempilhado: %d \n",numero);
                MostrarPilha(topo);
                break;
            default:
                printf( "Escolha invalida.\n\n");
                break;
        }
        Menu();
        scanf("%i", &opcao);
    }
    system("pause");
}