Operación y mantenimiento de una cola
#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", &eleccion ); /* mientras el usuario no introduzca 3 */ while ( eleccion != 3 ) { switch( eleccion ) { /* agrega el valor */ case 1: printf( "Introduzca un caracter: " ); scanf( "n%c", &elemento ); agregar( &ptrCabeza, &ptrTalon, elemento ); imprimeCola( ptrCabeza ); break; /* retira el valor */ case 2: /* si la cola no está vacÃÂa */ if ( !estaVacia( ptrCabeza ) ) { elemento = retirar( &ptrCabeza, &ptrTalon ); printf( "se desenfilo %c.n", elemento ); } /* fin de if */ imprimeCola( ptrCabeza ); break; default: printf( "Eleccion no valida.nn" ); instrucciones(); break; } /* fin de switch */ printf( "? " ); scanf( "%d", &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 colan" " 2 para eliminar un elemento de la colan" " 3 para terminarn" ); } /* 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.nn" ); } /* 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( "NULLnn" ); } /* fin de else */ } /* fin de la función imprimeCola */
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 :)