APUNTES DE ESTRUCTURA DE DATOS ________________________________________________________________________________________ //============================================================================== //============================================================================== // PROGRAMA : p16_coladinamica.cpp // FUNCION : Programa dinámico de una cola. // REALIZADO POR : Prof. Juan Juárez Fuentes (Basado en el libro de DEITEL) // COMPILADOR EN EL QUE SE EJECUTO: DEV-C //============================================================================== //============================================================================== // LIBRERIAS //============================================================================== //============================================================================== #include <stdio.h> #include <stdlib.h> //============================================================================== //============================================================================== // ESTRUCTURAS //============================================================================== //============================================================================== // Estructura autorreferenciada struct PLANTILLA_Nodo_de_Cola { int dato; struct PLANTILLA_Nodo_de_Cola *Apuntador_al_siguiente; }; //============================================================================== typedef struct PLANTILLA_Nodo_de_Cola SINONIMO_PLANTILLA_NODO_DE_COLA; //sinónimo de la estructura PLANTILLA_Nodo_de_Cola typedef SINONIMO_PLANTILLA_NODO_DE_COLA *APUNTADOR_NODO_DE_COLA; //sinónimo de SINONIMO_PLANTILLA_NODO_DE_COLA* //============================================================================== //============================================================================== // PROTOTIPO DE FUNCIONES //============================================================================== //============================================================================== void pon_en_Cola(APUNTADOR_NODO_DE_COLA *, APUNTADOR_NODO_DE_COLA *, int); int aca_de_Cola(APUNTADOR_NODO_DE_COLA *, APUNTADOR_NODO_DE_COLA *); int Cola_vacia(APUNTADOR_NODO_DE_COLA); void imprime_Cola(APUNTADOR_NODO_DE_COLA); void menu(void); void encabezado(void); void fin(void); //============================================================================== //============================================================================== 107 Prof. Juan Juárez Fuentes APUNTES DE ESTRUCTURA DE DATOS ________________________________________________________________________________________ // PRINCIPAL //============================================================================== //============================================================================== int main(void) { APUNTADOR_NODO_DE_COLA Apuntador_a_inicio_de_Cola = NULL; // apuntador al tope de la cola APUNTADOR_NODO_DE_COLA Apuntador_a_fin_de_Cola = NULL; // apuntador al tope de la cola int eleccion; int valor_leido ; encabezado( ) ; menu( ) ; printf ( "\n\n Opcion del menu: " ) ; scanf ( "%d", & eleccion ) ; while ( eleccion != 3 ) { switch ( eleccion ) { case 1: // pone valor en la cola printf ( "\n Dar un entero: " ) ; scanf ( "%d" , & valor_leido) ; pon_en_Cola ( & Apuntador_a_inicio_de_Cola , & Apuntador_a_fin_de_Cola , valor_leido ) ; imprime_Cola ( Apuntador_a_inicio_de_Cola) ; break ; case 2: // saca valor de la cola if ( ! Cola_vacia ( Apuntador_a_inicio_de_Cola ) ) { printf ( "\n El valor retirado es: %d.\n" , saca_de_Cola(& Apuntador_a_inicio_de_Cola, & Apuntador_a_fin_de_Cola) ) ; } imprime_Cola(Apuntador_a_inicio_de_Cola) ; break ; default: printf ( "Seleccion invalida.\n\n" ) ; menu() ; break ; } printf ( "\n Opcion del menu: " ) ; scanf ( "%d", & eleccion) ; } printf ( "\n\n\t Fin de la corrida.\n" ) ; fin ( ) ; 108 Prof. Juan Juárez Fuentes APUNTES DE ESTRUCTURA DE DATOS ________________________________________________________________________________________ system( "PAUSE" ) ; return 0; } //============================================================================== //============================================================================== // FUNCIONES BASICAS DE LA ESTRUCTURA COLA //============================================================================== //============================================================================== //--------------------------------------------------------------------------// Insertar un nodo en el tope de la cola void pon_en_Cola(APUNTADOR_NODO_DE_COLA *Apuntador_a_inicio_de_Cola, APUNTADOR_NODO_DE_COLA *Apuntador_a_fin_de_Cola, int valor_leido) { APUNTADOR_NODO_DE_COLA Apuntador_nuevo; Apuntador_nuevo = (struct PLANTILLA_Nodo_de_Cola *) malloc(sizeof(SINONIMO_PLANTILLA_NODO_DE_COLA)); If ( Apuntador_nuevo != NULL ) { Apuntador_nuevo -> dato = valor_leido; Apuntador_nuevo -> Apuntador_al_siguiente = NULL; If ( Cola_vacia(* Apuntador_a_inicio_de_Cola ) ) { *Apuntador_a_inicio_de_Cola = Apuntador_nuevo; } else { ( *Apuntador_a_fin_de_Cola ) -> Apuntador_al_siguiente = Apuntador_nuevo; } *Apuntador_a_fin_de_Cola = Apuntador_nuevo; } else { printf ( "%d no insertado. No hay memoria disponible.\n", valor_leido ); } } //--------------------------------------------------------------------------//--------------------------------------------------------------------------// Remover un nodo del tope de la cola int saca_de_Cola(APUNTADOR_NODO_DE_COLA *Apuntador_a_inicio_de_Cola, APUNTADOR_NODO_DE_COLA *Apuntador_a_fin_de_Cola) { int valor_retirado; valor_retirado = ( *Apuntador_a_inicio_de_Cola ) -> dato; 109 Prof. Juan Juárez Fuentes APUNTES DE ESTRUCTURA DE DATOS ________________________________________________________________________________________ *Apuntador_a_inicio_de_Cola = ( *Apuntador_a_inicio_de_Cola ) -> Apuntador_al_siguiente; if ( *Apuntador_a_inicio_de_Cola == NULL ) { *Apuntador_a_fin_de_Cola = NULL; } return valor_retirado; } //--------------------------------------------------------------------------//--------------------------------------------------------------------------//Imprimir la cola void imprime_Cola(APUNTADOR_NODO_DE_COLA Apuntador_en_curso) { if ( Apuntador_en_curso == NULL ) { printf ( "\n La cola esta vacia.\n\n" ); } else { printf ( "\n La cola es: " ); while(Apuntador_en_curso != NULL) { printf ( "%d --> ", Apuntador_en_curso -> dato ); Apuntador_en_curso = Apuntador_en_curso -> Apuntador_al_siguiente; } printf ( "NULL\n\n" ); } } //--------------------------------------------------------------------------//--------------------------------------------------------------------------// la cola esta vacia? int Cola_vacia(APUNTADOR_NODO_DE_COLA Apuntador_a_inicio_de_Cola) { return Apuntador_a_inicio_de_Cola == NULL; } //--------------------------------------------------------------------------//============================================================================== // FUNCIONES COMPLEMENTARIAS DEL PROGRAMA //============================================================================== //--------------------------------------------------------------------------// Imprimir las instrucciones 110 Prof. Juan Juárez Fuentes APUNTES DE ESTRUCTURA DE DATOS ________________________________________________________________________________________ void menu(void) { printf ( "\t\t\t Dar la selccion:\n\n" ); printf ( "\t\t 1 para poner un valor en la cola\n" ); printf ( "\t\t 2 para sacar un valor de la cola\n" ); printf ( "\t\t 3 para finalizar el programa\n" ); } //--------------------------------------------------------------------------//--------------------------------------------------------------------------void encabezado() { printf ( "\n\n===========================================================================" ); printf ( "\n\t\tPROGRAMA QUE IMPLEMENTA UNA COLA DINAMICA\n" ); printf ( "===========================================================================\n\n\n" ); } //--------------------------------------------------------------------------//--------------------------------------------------------------------------void fin() { printf ( "\n\n===========================================================================" ); printf ( "\nESTRUCTURA DE DATOS\t\t\t\tProf.: JUAN JUAREZ FUENTES\n" ); printf ( "UNIVERSIDAD TECNOLOGICA DE LA MIXTECA\n" ); printf ( "===========================================================================\n\n\n" ); } //--------------------------------------------------------------------------//============================================================================== //============================================================================== //============================================================================== //============================================================================== 111 Prof. Juan Juárez Fuentes