Ejemplo de cola dinámica - Universidad Tecnológica de la Mixteca

Anuncio
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
Descargar