PROGRAMA EJEMPLO PARA MANEJO DE COLAS:
Bajar el programa completo en PDF. Se puede copiar al editor del C++, usando el icono Select tool, en la barra de herramientas del Acrobat reader.
El siguiente programa implementa una cola, en donde en cada no se almacena el nombre de una persona. Esta escrito con OO. La primera parte corresponde a la implementación de la clase, debe guardarse en un archivo con extensión .h. La segunda parte corresponde al programa principal, debe guardarse en el mismo directorio en donde se guarde la clase.
// Implementacion de la clase colas
#ifndef COLA_H
#define
COLA_H
class colas
{
/* Se define la estructura del nodo de la lista,
en este caso se guardaran datos de tipo entero.
*/
struct nodo {
char nomb[20];
char apel[20];
nodo *siguiente;
};
// Definicion de variables para controlar la cola
nodo *Ini_cola, *Fin_cola, *Aux, *Aux1;
/* Ini_cola es puntero que apunta al primer elemento de la cola
Fin_cola es un puntero que apunta al ultimo elemento de la cola
Aux y Aux1 son variables auxiliar para recorrer la cola
*/
public:
colas(); // Constructor
void Insertar(char nom[20]);
int ConsultarPosicion(char nom[20]);
void Retirar();
void MostrarDatos();
~colas(); // Destructor
}; //Finaliza la definicion de metodos...
#endif
// Se implementan los metodos
// Constructor
colas::colas()
{
Ini_cola = NULL;
Fin_cola = NULL;
}
//Metodo para insertar un nodo en la cola (se inserta despues del ultimo)
void colas::Insertar(char nom[20])
{
//Se crea un nuevo nodo usando la variable auxiliar
Aux = new nodo;
if (Aux==NULL) // Se verifica si hay memoria disponible
{
cout<<"No hay memoria suficinente...para crear mas nodos...";
system("PAUSE");
}
strcpy(Aux->nomb, nom);
Aux->siguiente = NULL;
cout<<"Se ha creado un nodo con el dato: "<<nom<<" ("<<Aux->nomb<<")"<<endl;
// Se guarda la informacion en el campo de datos
if (Ini_cola == NULL)
{
Ini_cola = Aux;
cout<<"Se creo el primer nodo: "<<Ini_cola->nomb<<endl;
}
else
{
// Enlazo el nuevo nodo con el que estaba de ultimo (Fin_cola apunta al ultimo)
Aux1 = Fin_cola;
Aux1->siguiente = Aux;
// El nuevo nodo ahora sera el ultimo, por lo tanto Fin_cola apunta a el.
cout<<"\nEl nodo se inserto al final de la cola..."<<endl;
}
Fin_cola = Aux;
} // Fin del metodo Inertar
// Metodo para consultar la posicion de un nodo en la cola
int colas::ConsultarPosicion(char nom[20])
{
int pos = 0;
bool seguir = false; //Indica cundo se ha encontrado el dato buscado
Aux = Ini_cola;
cout<<"\nFavor esperar...consultado buscando informacion..."<<endl;
// Se recorre la cola para buscar si los datos coinciden
if (Aux!=NULL) seguir = true;
while(seguir)
{
//Se compara el contenido del nodo con el dato buscado
if((strcmp(Aux->nomb, nom)==0))
seguir = false; // dato encontrado.
pos++; //Incremento en uno el contador de posicion
Aux = Aux->siguiente; // paso al siguiente nodo
if(Aux==NULL) seguir = false;
}
return pos;
}
void colas::MostrarDatos()
{
Aux = Ini_cola;
cout<<"\nINFORMACION DE
cout<<endl<<"Primero: ";
while(Aux!=NULL)
{
//Se imprime el contenido de cada nodo (campo nomb)
cout<<Aux->nomb<<" - ";
Aux = Aux->siguiente;
}
cout<<"...y este es el ultimo en la cola!!! "<<endl<<endl;
} // Final del metodo mostrar la lista
//Destructor
colas::~colas()
{
Aux = Ini_cola;
cout<<"\nse va a eliminar la cola de la memoria..."<<endl;
while(Aux!=NULL)
{
//Se imprime el contenido de cada nodo (campo nomb)
delete Aux;
Aux = Aux->siguiente;
}
delete Ini_cola;
delete Fin_cola;
cout<<"...la cola se elimino de la memoria RAM..."<<endl<<endl;
} // Se termina la implementación de la clase colas
Este es el programa principal, para manejo
de colas:
#include
<cstdlib>
#include
<iostream>
#include
<iomanip>
using
namespace std;
#include
"colas.h"
int main(int
argc, char *argv[])
{
int opc;
colas cola;
do
{
// Menu de opciones disponibles
cout<<"*** OPCIONES
DISPONIBLES ***\n"<<endl;
cout<<"1. Incluir nodo"<<endl;
cout<<"2. Elminar un nodo"<<endl;
cout<<"3. Consultar posicion"<<endl;
cout<<"4. Listar la cola"<<endl;
cout<<"5. Terminar"<<endl;
cout<<"digite su opcion: ";
//Lectura de la opcion elegida por el usuario
do {
cin>>opc;
} while (opc<1 ||opc>6);
switch(opc)
{
case 1:
{
char nombre[20];
char apellido[20];
//Leer el dato a insertar
cout<<"Digite el nombre : "; cin>>nombre;
//cout<<"Digite el apellido: "; cin>>apellido;
// Se invoca el metodo insertar
cola.Insertar(nombre);
break;
}
case 2:
{
//cola.Retirar();
break;
}
case 3:
{
case 3:
{
int posicion;
char *nombre;
int apellido;
//Leer el dato a insertar
cout<<"Digite el nombre : "; cin>>nombre;
cout<<"Digite el apellido: "; cin>>apellido;
posicion = 0;
posicion = cola.ConsultarPosicion(nombre,apellido);
if(posicion==0)
{
cout<<"No se encontro el dato buscado..."<<endl;
system("PAUSE");
}
else
{
cout<<"El dato se encontro en la poscion: "<<posicion<<endl;
system("PAUSE");
}
break;
}
case 4:
{
cola.MostrarDatos();
break;
}
} // Fin del switch
} while (opc <=4);
cout<<"\nPrograma terminado...
"<<endl;
system("PAUSE");
return EXIT_SUCCESS;
} // Fin del programa principal