EdD - Clase Stack (alternativa a la clase desarrollada en teoría)

Ir abajo

EdD - Clase Stack (alternativa a la clase desarrollada en teoría)

Mensaje  Admin el Dom Sep 25, 2011 1:24 pm

A continuación se muestra el diagrama y código de una implementación alternativa del Tipo de Dato Abstracto Pila (Stack)
En este caso se utiliza un arreglo (no un ArrayList)
Diagrama de clase:

Implementación de la Estructura de Datos:
Código:

using System;

namespace DemoPila3
{
  /// <summary>
  /// Implementación de Lista de pila almacenada en secuencia
  /// </summary>
  public class Stack <ELEMENT>
  {
    #region Estructura Interna

    /// <summary>
    /// Tamaño por defecto del contenedor
    /// </summary>
    private static readonly int DEFAULT_SIZE = 10;

    /// <summary>
    /// Mantiene la colección de elementos
    /// </summary>
    private ELEMENT[] collection;

    /// <summary>
    /// Mantiene el próximo lugar a utilizar de la colección
    /// </summary>
    private int top;

    #endregion

    #region Constructores
      /// <summary>
    /// Constructor por defecto
    /// Nos aseguramos que el contenedor sea válido
    /// </summary>
    public Stack()
    {
      this.collection = new ELEMENT[DEFAULT_SIZE];
      this.top = 0;
    }

    /// <summary>
    /// Constructor especializado
    /// <precondition>
    /// El tamaño debe ser mayor que cero
    /// </precondition>
    /// </summary>
    /// <param name="size">Tamaño del contenedor</param>
    public Stack(int size)
    {
      if (size <= 0)
      {
        throw new ArgumentException("Argumento inválido size " + size.ToString());
      }
      this.collection = new ELEMENT[size];
      this.top = 0;
    }

    #endregion

    #region Propiedades

    /// <summary>
    /// Determina si la pila (Stack) está vacía
    /// </summary>
    public bool IsEmpty
    {
      get
      {
        return this.top <= 0;
      }
    }

    /// <summary>
    /// Determina si la pila (Stack) está llena
    /// </summary>
    public bool IsFull
    {
      get
      {
        return this.top == this.collection.Length;
      }
    }

    /// <summary>
    /// Determina si la pila (Stack) está normal
    /// </summary>
    public bool IsNormal
    {
      get
      {
        return !(this.IsEmpty || this.IsFull);
      }
    }

    #endregion

    #region Métodos que implementan el comportamiento

    /// <summary>
    /// Agrega un elemento en la pila (Stack)
    /// <precondition>
    /// La pila (Stack) no debe estar llena
    /// </precondition>
    /// </summary>
    /// <param name="x">Elemento que se agrega</param>
    public void Push(ELEMENT x)
    {
      if (this.IsFull)
      {
        throw new Exception("Intento de meter un elemento de una pila llena");
      }
      this.collection[this.top] = x;
      ++this.top;
    }

    /// <summary>
    /// Extrae un elemento de la pila (Stack)
    /// <precondition>
    /// La pila (Stack) debe contener elementos
    /// </precondition>
    /// </summary>
    /// <returns>Elemento extraído</returns>
    public ELEMENT Pop()
    {
      if (this.IsEmpty)
      {
        throw new Exception("Intento de sacar un elemento de una pila vacía");
      }
      --this.top;
      ELEMENT obj = this.collection[this.top];
      return obj;
    }

    /// <summary>
    /// Deveuelve el elemento que puede extraerse de la pila (Stack) sin sacarlo
    /// <precondition>
    /// La pila (Stack) debe contener elementos
    /// </precondition>
    /// </summary>
    /// <returns>Elemento que puede extraerse</returns>
    public ELEMENT Peek()
    {
      if (this.IsEmpty)
      {
        throw new Exception("Intento de ver un elemento de una pila vacía");
      }
      return (ELEMENT)this.collection[this.top - 1];
    }

    #endregion
  }
}
Espero que sirva para comparar con la otra implementación.
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.