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

No hay comentarios:

Publicar un comentario