Estructura de Datos
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

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) Empty EdD - Clase Queue (implementada con lista genérica en la estructura interna)

Mensaje  Admin 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"
EdD - Clase Queue (implementada con lista genérica en la estructura interna) Tp04e012

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