Operación y mantenimiento de una cola

c:
#include <stdio.h>
#include <stdlib.h>

/* estructura autoreferenciada */
struct nodoCola {   
   char dato;                 /* define dato como un char */
   struct nodoCola *ptrSiguiente; /* apuntador nodoCola */
}; /* fin de la estructura nodoCola */

typedef struct nodoCola NodoCola;
typedef NodoCola *ptrNodoCola;

/* prototipos de las funciones */
void imprimeCola( ptrNodoCola ptrActual );
int estaVacia( ptrNodoCola ptrCabeza );
char retirar( ptrNodoCola *ptrCabeza, ptrNodoCola *ptrTalon );
void agregar( ptrNodoCola *ptrCabeza, ptrNodoCola *ptrTalon,
              char valor );
void instrucciones( void );

/* la función main comienza la ejecución del programa */
int main()
{
   ptrNodoCola ptrCabeza = NULL; /* incializa ptrCabeza */
   ptrNodoCola ptrTalon = NULL/* incializa ptrTalon */
   int eleccion;                 /* elección de menú del usuario */
   char elemento;                /* entrada char del usuario */

   instrucciones(); /* despliega el menú */
   printf( "? " );
   scanf( "%d", &#038;eleccion );

   /* mientras el usuario no introduzca 3 */
   while ( eleccion != 3 ) {

      switch( eleccion ) {

         /* agrega el valor */
         case 1:
            printf( "Introduzca un caracter: " );
            scanf( "\n%c", &#038;elemento );
            agregar( &#038;ptrCabeza, &#038;ptrTalon, elemento );
            imprimeCola( ptrCabeza );
            break;

         /* retira el valor */
         case 2:

            /* si la cola no está vacía */
            if ( !estaVacia( ptrCabeza ) ) {
               elemento = retirar( &#038;ptrCabeza, &#038;ptrTalon );
               printf( "se desenfilo %c.\n", elemento );
            } /* fin de if */

            imprimeCola( ptrCabeza );
            break;

         default:
            printf( "Eleccion no valida.\n\n" );
            instrucciones();
            break;

      } /* fin de switch */

      printf( "? " );
      scanf( "%d", &#038;eleccion );
   } /* fin de while */

   printf( "Fin de programa.\n" );
   
   return 0; /* indica terminación exitosa */

} /* fin de main */

/* despliega las instrcciones del programa para el usuario */
void instrucciones( void )
{
   printf ( "Introuzca su elección:\n"
           "   1 para retirar un elemento a la cola\n"
           "   2 para eliminar un elemento de la cola\n"
           "   3 para terminar\n" );
} /* fin de la función instrucciones */

/* inserta un nodo al final de la cola */
void agregar( ptrNodoCola *ptrCabeza, ptrNodoCola *ptrTalon,
              char valor )
{
   ptrNodoCola ptrNuevo; /* apuntador a un nuevo nodo */

   ptrNuevo = malloc( sizeof( NodoCola ) );

   if ( ptrNuevo != NULL ) { /* es espacio disponible */
      ptrNuevo->dato = valor;
      ptrNuevo->ptrSiguiente = NULL;

      /* si esta vacía inserta un nodo en la cabeza */
      if ( estaVacia( *ptrCabeza ) ) {
         *ptrCabeza = ptrNuevo;
      } /* fin de if */
      else {
         ( *ptrTalon )->ptrSiguiente = ptrNuevo;
      } /* fin de else */

      *ptrTalon = ptrNuevo;
   } /* fin de if */
   else {
      printf( "no se inserto %c. No hay memoria disponible.\n", valor );
   } /* fin de else */

} /* fin de la función agregar */

/* elimina el nodo de la cabeza de la cola */
char retirar( ptrNodoCola *ptrCabeza, ptrNodoCola *ptrTalon )
{
   char valor;           /* valor del nodo */
   ptrNodoCola tempPtr; /* apuntador a un nodo temporal */

   valor = ( *ptrCabeza )->dato;
   tempPtr = *ptrCabeza;
   *ptrCabeza = ( *ptrCabeza )->ptrSiguiente;

   /* si la cola está vacía */
   if ( *ptrCabeza == NULL ) {
      *ptrTalon = NULL;
   } /* fin de if */

   free( tempPtr );

   return valor;

} /* fin de la función retirar */

/* Devuelve 1 si la cola está vacía, de lo contrario devuelve 0 */
int estaVacia( ptrNodoCola ptrCabeza )
{
   return ptrCabeza == NULL;

} /* fin de la función estaVacia */

/* Imprime la cola */
void imprimeCola( ptrNodoCola ptrActual )
{

   /* si la cola esta vacía */
   if ( ptrActual == NULL ) {
      printf( "La cola esta vacia.\n\n" );
   } /* fin de if */
   else {
      printf( "La cola es:\n" );

      /* mientras no sea el final de la cola */
      while ( ptrActual != NULL ) {
         printf( "%c --> ", ptrActual->dato );
         ptrActual = ptrActual->ptrSiguiente;
      } /* fin de while */

      printf( "NULL\n\n" );
   } /* fin de else */

} /* fin de la función imprimeCola */
¿Ya le viste algún error? Dejanos tu correción ;-)

Antes de comentar: Gran parte de los ejercicios propuestos no tienen librerías debido a que Wordpress elimina los tags HTML. Si sabes/tienes/conoces las librerías que hacen falta, déjalo en los comentarios.

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

De esta manera el código sale coloreado.

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 último párrafo.

Para poner los símbolos de las librerías sin que desaparezcan, debes escribir los símbolos de mayor > y menor qué < con su entidad HTML correspondiente, así como el símbolo de &

Mis Algoritmos se reserva el derecho de alterar, publicar o no los comentarios así como cambiar estas reglas de uso.

Si estas de acuerdo, adelante puedes comentar :)

P.D. No le hago tareas a nadie, mejor hagan la mía :P