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.
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
#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;
}
0 Comment to "Colas en C++ usando punteros (Memoria Dinámica)"
Publicar un comentario