Implementacion de una cola mediante lista enlazada circular

/* Implementación de una cola mediante lista enlazada circular */
/* ----------------------------------------------------------- */
 
#include <stdio.h>
#include <stdlib.h>
 
  /* declaracion */
  /* ----------- */
struct tcola
{
  int clave;
  struct tcola *sig;
};
 
  /* prototipos y codificación */
  /* ------------------------- */
 
void crear(struct tcola **cola)
{
  *cola = NULL;
}
 
int vacia(struct tcola *cola)
{
  return (cola == NULL);
}
 
void encolar(struct tcola **cola, int elem)
{
  struct tcola *nuevo;
 
  nuevo = (struct tcola *) malloc(sizeof(struct tcola));
  nuevo->clave = elem;
  if (*cola == NULL)
  nuevo->sig = nuevo;
  else {
    nuevo->sig = (*cola)->sig;
    (*cola)->sig = nuevo;
  }
  (*cola) = nuevo;
}
 
void desencolar(struct tcola **c1, int *elem)
{
  struct tcola *aux;
 
  *elem = (*c1)->sig->clave;
  if ((*c1) == (*c1)->sig) {
    free(*c1);
    *c1 = NULL;
  }
  else {
    aux = (*c1)->sig;
    (*c1)->sig = aux->sig;
    free(aux);
  }
}
 
  /* Programa de prueba */
  /* ------------------ */
#include <stdio.h>
 
int main(void)
{
  struct tcola *cola;
  int elem;
 
  crear(&cola);
  if (vacia(cola)) printf("nCola vacia!");
  encolar(&cola, 3);
  desencolar(&cola, &elem);
 
  return 0;
}

¿Has encontrado algún error? ¿Tienes la solución? Dejame tu correción ;-)

Antes de comentar: Gran parte de los ejercicios propuestos no tienen librerías debido a que Wordpress las eliminó al verlas como etiquetas HTML. Si sabes/tienes/conoces las librerías que hacen falta, déjalo en los comentarios. Y lo mas importante: Todos los ejemplos fueron realizados por personas con únicamente conocimiento básico del lenguaje, no de programación.

Otro punto importante: Si vas a sugerir un segmento de código en algún lenguaje debes hacerlo así:

  • Si es lenguaje C [c]Código en C[/c]
  • Si es lenguaje Pascal [pascal]Aquí dentro el código de Pascal[/pascal].

De esta manera el código coloreas el código.

Otro punto importante para muchos que sienten que se les ignora: Todos los comentarios los reviso y en su debido momento los apruebo, pero ojo con el con lo siguiente:

Me reservo el derecho de alterar, publicar o no los comentarios as´ como cambiar mis condiciones en el momento que así lo requiera.

¿estas de acuerdo? entonces adelante que ya te he quitado bastante tiempo leyendo esta basura de advertencias :)