EdD - Clase Queue (implementada con lista genérica en la estructura interna)
Página 1 de 1.
EdD - Clase Queue (implementada con lista genérica en la estructura interna)
El siguiente diagrama de clases muestra la realización de la clase Queue<T> que mantiene en su estructura interna una lista. En este diagrama se utiliza la forma de mostrar las relaciones entre clase mediante "asociaciones"
Es importante destacar que los objetos del tipo Queue<T> tienen en su estructura interna un campo llamado lista que es del tipo List<T> y que los objetos del tipo List<T> tienen dos campos en la estructura interna llamados head y tail que son del tipo Node<T>, también se puede ver que cada objeto del tipo Node<T> tiene un campo en su estructura interna llamado next que asocia a un objeto del mismo tipo.
El código que implementa la cola genérica con una lista en su estructura interna es el siguiente:
Como dice el comentario del método Peek(), no es lo mejor pero es lo que se puede hacer con el comportamiento de los objetos del tipo List<T>. Hace falta un mecanismo que nos permita acceder (en modo lectura) a un elemento en particular de la lista.
Es importante destacar que los objetos del tipo Queue<T> tienen en su estructura interna un campo llamado lista que es del tipo List<T> y que los objetos del tipo List<T> tienen dos campos en la estructura interna llamados head y tail que son del tipo Node<T>, también se puede ver que cada objeto del tipo Node<T> tiene un campo en su estructura interna llamado next que asocia a un objeto del mismo tipo.
El código que implementa la cola genérica con una lista en su estructura interna es el siguiente:
- Código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace E05
{
/// <summary>
/// Implementación de la Clase Queue con listas
/// </summary>
/// <typeparam name="ELEMENT">Tipo de dato de elementos que se introduce en la cola</typeparam>
class Queue<ELEMENT>
{
/// <summary>
/// Mantiene los elementos en la cola
/// </summary>
private List<ELEMENT> lista;
/// <summary>
/// Determina si la cola está vacia
/// </summary>
public bool IsEmpty
{
get { return this.lista.IsEmpty; }
}
/// <summary>
/// Determina si la cola esta llena
/// </summary>
public bool IsFull
{
get { return false; }
}
/// <summary>
/// Constructor por defecto
/// </summary>
public Queue()
{
this.lista = new List<ELEMENT>();
}
/// <summary>
/// Agrega un elemento en la cola
/// </summary>
/// <param name="x">Elemento a agregar</param>
public void EnQueue(ELEMENT x)
{
if (this.IsFull)
{
throw new Exception("Cola llena");
}
this.lista.AddToTail(x);
}
/// <summary>
/// Retira el proximo elemento a sacar de cola
/// </summary>
/// <returns>Elemento</returns>
public ELEMENT DeQueue()
{
if (this.IsEmpty)
{
throw new Exception("Cola vacía");
}
return this.lista.RemoveFromHead();
}
/// <summary>
/// Obtiene una referencia al elemento que está
/// lista para sacar de la cola
/// </summary>
/// <returns>Elemento</returns>
public ELEMENT Peek()
{
if (this.IsEmpty)
{
throw new Exception("Cola vacía");
}
// Hasta el momento es la única forma que podemos
// realizar esta operación ya que no tenemos acceso
// al interior de la lista
ELEMENT temp = this.lista.RemoveFromHead();
this.lista.AddToHead(temp);
return temp;
}
}
}
Como dice el comentario del método Peek(), no es lo mejor pero es lo que se puede hacer con el comportamiento de los objetos del tipo List<T>. Hace falta un mecanismo que nos permita acceder (en modo lectura) a un elemento en particular de la lista.
Temas similares
» EdD - Clase Queue (desarrollada en teoría)
» EdD - Clase Queue (alternativa de velocidad, desarrollada en teoría)
» EdD - Clase Queue (subclase de la que viene en el Framework de Microsoft)
» EdD - Clase Stack (alternativa a la clase desarrollada en teoría)
» EdD - Clase BinaryTree (lo más simple)
» EdD - Clase Queue (alternativa de velocidad, desarrollada en teoría)
» EdD - Clase Queue (subclase de la que viene en el Framework de Microsoft)
» EdD - Clase Stack (alternativa a la clase desarrollada en teoría)
» EdD - Clase BinaryTree (lo más simple)
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|