EdD - Clase Stack (alternativa a la clase desarrollada en teoría)
Página 1 de 1.
EdD - Clase Stack (alternativa a la clase desarrollada en teoría)
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:
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
}
}
Temas similares
» EdD - Clase Stack (desarrollada en teoría)
» EdD - Clase Queue (alternativa de velocidad, desarrollada en teoría)
» EdD - Clase Queue (desarrollada en teoría)
» EdD - Clase Stack (subclase de la que viene en el Framework de Microsoft)
» EdD - Clase BinaryTree (lo más simple)
» EdD - Clase Queue (alternativa de velocidad, desarrollada en teoría)
» EdD - Clase Queue (desarrollada en teoría)
» EdD - Clase Stack (subclase de la que viene en el Framework de Microsoft)
» EdD - Clase BinaryTree (lo más simple)
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|