Mostrando entradas con la etiqueta Colas. Mostrar todas las entradas
Mostrando entradas con la etiqueta Colas. Mostrar todas las entradas

miércoles, 21 de septiembre de 2011

Cola de un grifo

Demostración del funcionamiento de una cola




ColaString.h

#pragma once

class ColaString
{
private:
int size;
int last;//Ultimo elemento
public:
bool llena;
bool hasElements;

struct structCola
{
wchar_t *dato;
int tam;//Tamaño de cada elemento
} *cola;

public:
ColaString(int); //Constructor
bool encolar(System::String^ dato);
System::String^ desencolar();
System::String^ getPrimerElemento();
int length();
System::String^ getCola();
};


ColaString.cpp

#include "StdAfx.h"
#include "ColaString.h"

ColaString::ColaString(int tam)
{
size = tam;
last = -1; //lastecera apunta a -1, entonces no hay elementos en la cola
cola = new structCola[size];

llena = false;
hasElements = false;
}

//Inserta un elemento en la cola
bool ColaString::encolar(System::String^ dato)
{
if(llena)
return false;
else
{
last++;
cola[last].tam = dato->Length;
cola[last].dato = new wchar_t[cola[last].tam];

//Convertimos el string en un arreglo de caracteres!
for(int i=0;i<cola[last].tam;i++)
cola[last].dato[i] = dato[i];

hasElements = true;

if(last == size-1)
llena = true;

return true;
}
}

//Extrae el elemento de la lastecera de la cola
System::String^ ColaString::desencolar()
{
System::String^ cadena = getPrimerElemento();

if(cadena->CompareTo("La cola está vacía"))
{
System::String^ cadena = getPrimerElemento();

for(int i=1;i<=last;i++)//Avanzamos la cola
cola[i-1]=cola[i];

last--;

llena = false;

if(last<0)
hasElements = false;
}

return cadena;
}

//Muestra el elemento de la lastecera de la cola
System::String^ ColaString::getPrimerElemento()
{
if(hasElements)
{
System::String^ cadena;

//Convertimos el arreglo de caracteres en un string !
for(int i=0;i<cola[0].tam ;i++)
cadena += cola[0].dato[i];

return cadena;
}
else
return "La cola está vacía";

}

int ColaString::length()
{
return last+1;
}

System::String^ ColaString::getCola()
{
System::String^ colaGeted = "";

for(int i=0;i<=last;i++)
{
for(int j=0;j<cola[i].tam ;j++)
colaGeted += cola[i].dato[j];

colaGeted+="\r\n";//Salto de línea;
}

return colaGeted;
}

Descargar la solución para abrir con Visual Studio 2010