Colas en C++ usando punteros (Memoria Dinámica)

Una cola es un tipo especial de lista abierta en la que sólo se pueden insertar nodos en uno de los extremos de la lista y sólo se pueden eliminar nodos en el otro. Además, como sucede con las pilas, las escrituras de datos siempre son inserciones de nodos, y las lecturas siempre eliminan el nodo leído.
Este tipo de lista es conocido como lista FIFO (First In First Out), el primero en entrar es el primero en salir.





El símil cotidiano es una cola para comprar, por ejemplo, las entradas del cine. Los nuevos compradores sólo pueden colocarse al final de la cola, y sólo el primero de la cola puede comprar la entrada.
     
En este pequeño programa se realizara las operaciones basicas en colas : Encolar, Desencolar usando un Menu de Opciones


//clase Dato
Dato.h #pragma once
#include <string>

using namespace std;
class Dato {
public:
    
double Codigo;
    
string Nombre;
    
string Carrera;
    
Dato(){
        
Codigo = 0;
        
Nombre = "Unknow";
        
Carrera = "Unknow";
    
}

};
//clase Nodo



#pragma once
#include "Dato.h"

class Nodo { public:
    
Dato dato;
    
Nodo *puntero;
    
    
Nodo(){ //Constructor de la clase

        puntero = NULL;
    
}

}; 

//clase Main



#include <iostream>
#include "Nodo.h"
//Se incluye a la clase Nodo

using namespace std;
void Encolar( Nodo *&inicio, Nodo *&fin){ //Punteros enviados por referencia     
    
Nodo *Elemento = new Nodo; //Creacion del nodo     
    
if(inicio == NULL){
        
        
inicio = fin = Elemento; //Le asigno la direccion del primer nodo         
        
cout<<"Codigo: "; cin>>Elemento->dato.Codigo;
        
cout<<"Nombres: s"; cin>>Elemento->dato.Nombre;
        
cout<<"Carrera: "; cin>>Elemento->dato.Carrera;
        
        
    
}else{
        
        
fin->puntero = Elemento; //Asigno el puntero del anterior elemento al nuevo


        fin = Elemento; //Cambio la direccion del ultimo nodo creado 

        cout<<"Codigo: "; cin>>Elemento->dato.Codigo;
        
cout<<"Nombres: "; cin>>Elemento->dato.Nombre;
        
cout<<"Carrera: "; cin>>Elemento->dato.Carrera; cout<<endl;
        
    
}
    
    
} void Desencolar(Nodo *&inicio){
    
if(inicio != NULL){
        
cout<<"Codigo: "<<inicio->dato.Codigo<<endl;
        
cout<<"Nombres: "<<inicio->dato.Nombre<<endl;
        
cout<<"Carrera: "<<inicio->dato.Carrera<<endl;
        
inicio = inicio->puntero; // Cambio Inicio al siguiente nodo

    }else{
        
cout<<"La cola se encuentra vacia"<<endl;
    
} } int main (int argc, char *argv[]) {
    
Nodo *inicio = NULL , *fin = NULL; //Punteros libres para el manejo de la cola

    int opc = 0, respuesta = 0;
    
do{
        
cout<<"1. LA COLA ESTA VACIA?"<<endl;
        
cout<<"2. ENCOLAR"<<endl;
        
cout<<"3. DESENCOLAR"<<endl;
        
cout<<"4. FINALIZAR"<<endl;
        
cout<<"Opcion: "; cin>>opc;
        
        
        
switch (opc){
        
case 1 :
            
if( inicio == NULL)
                
cout<<"La cola se encuentra vacia"<<endl;
            
else
                
cout<<"Existe elemento(s) dentro de la cola"<<endl;
            
break;
        
case 2 :
            
Encolar(inicio,fin);
            
break;
        
case 3:
            
Desencolar(inicio);
            
break ;
            
        
}
        
    
}while(opc != 4);
    
    
    
return 0; }

Compartir

0 Comment to "Colas en C++ usando punteros (Memoria Dinámica)"

Publicar un comentario