viernes, 25 de noviembre de 2011

Cola circular

La cola circular es la más eficiente de las colas que se pueden realizar con arreglos de datos predefinidos, a continuación muestro un ejemplo:

class Cola<t>
{
int _noElems;
int _p;
int _u;
t[] _a;
bool _vacia, _llena;

public Cola(int tamaño)
{
_a = new t[tamaño];
_p = 0;
_u = 0;
_vacia = true;
_llena = false;
}

public Cola()
  { }
Este método sirve para agregar un elemento a la cola circular
public void Agregar(t dato)
{
if (!_llena)
{
if (_u == _a.Length)
_u = 0; ;
_a[_u++] = dato;
_noElems++;
_vacia = false;
if (_noElems == _a.Length)
_llena = true;
}
else
throw new ApplicationException("Overflow");
  }
Este método sirve para extraer un elemento de la cola circular
public t Extraer()
{
if (!_vacia)
{
if (_p == _a.Length)
_p = 0;
t temp = _a[_p++];
_noElems--;
_llena = false;
if (_noElems == 0)
_vacia = true;
return temp;
}
else
throw new ApplicationException("Underflow");
}
Este método es una sobrecarga del método ToString() que ayuda a visualizar todos los elementos de una cola circular

public override string ToString()
{
string a = "";
int uT = _u > _p ? _u : _a.Length;
for (int i = _p; i < uT; i++)
{
a += _a[i];
a += " ";
}
if (_u < _p)
{
for (int i = 0; i < _u; i++)
{
a += _a[i];
a += " ";
}
}
return a;
}
}

Puedes descargar el proyecto que hace uso de esta clase aquí:
http://www.mediafire.com/?hmwbrb3hbmspca0

No hay comentarios:

Publicar un comentario