EdD - Clase Queue (implementada con lista genérica en la estructura interna)

Ir abajo

EdD - Clase Queue (implementada con lista genérica en la estructura interna)

Mensaje  Admin el Jue Oct 13, 2011 12:41 pm

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:
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.
avatar
Admin
Admin

Cantidad de envíos : 94
Fecha de inscripción : 28/08/2009

http://www.jtentor.com.ar

Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.