TAD pila (stack). Tipo Abstracto de Datos – PILA.
En una pila lo último que entra es lo primero que sale.
Necesitamos la librería System.Collections
using System;
// TADS fuertemente tipados
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// TADS pila, colas, etc.
using System.Collections;
namespace EjemploPila
{
class Program
{
static void Main(string[] args)
{
string palabra;
Stack miPila = new Stack();
miPila.Push("hola");
miPila.Push("buenos");
miPila.Push("días");
for (byte i = 0; i < 3; i++)
{
palabra = (string)miPila.Pop();
Console.WriteLine(palabra);
}
Console.ReadKey();
}
}
}
Otros métodos, además del Push y Pop:
- Peek: mira el valor de la cabeza pero sin desapilar.
- Clear: borra todo el contenido de la pila.
- Contains: indica si un cierto elemento está en la pila.
- GetType: para saber de que tipo son los elementos almacenados en la pila.
- ToString: devuelve el elemento actual convertido en un string.
- ToArray. devuelve toda la pila convertida en un array.
- GetEnumerator: permite usar enumeradores para recorrer la pila.
- Count: indica cuantos elementos contiene.
Ejercicio: Simular una baraja de cartas, se sacan de forma aleatoria y se van apilando en una estructura «stack». Luego de forma aleatoria se dice un número (siempre menor o igual al número de cartas) y se van sacando y mostrando todas las cartas que se sacan de la pila.
TAD cola (stack). Tipo Abstracto de Datos – COLA.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace EjemploCola
{
class Program
{
static void Main(string[] args)
{
string palabra;
Queue miCola = new Queue();
miCola.Enqueue("Hola ");
miCola.Enqueue("buenos ");
miCola.Enqueue("días.");
for (byte i = 0; i < 3; i++)
{
palabra = (string)miCola.Dequeue();
Console.WriteLine(palabra);
}
Console.ReadKey();
}
}
}
Otros métodos además del Enqueue y Dequeue:
- Peek: mira el valor de la cabeza pero sin extraer.
- Clear: borra todo el contenido de la cola.
- Contains: indica si un cierto elemento está en la cola.
- GetType: para saber de que tipo son los elementos almacenados en la cola.
- ToString: devuelve el elemento actual convertido en un string.
- ToArray. devuelve toda la cola convertida en un array.
- GetEnumerator: permite usar enumeradores para recorrer la pila.
- Count: indica cuantos elementos contiene.
Ejercicio:
Desarrolle un programa en consola con un menú para el usuario que permita agregar elementos a una pila, eliminar elementos de la pila, vaciar la pila completa y mostrar la pila en pantalla, el programa solo debe aceptar números enteros del 1 al 99. Si el usuario introduce una opción que no existe o un valor erróneo el programa de avisar al usuario con un mensaje en pantalla y continuar con el programa.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace conStack
{
class Program
{
static void Main(string[] args)
{
Stack miPila = new Stack();
int opcion;//opcion del menu
do{
Console.Clear();//se limpia consola
opcion = menu();//muestra menu y espera opción
switch (opcion)
{
case 1:
agregar(ref miPila);
break;
case 2:
eliminar(ref miPila);
break;
case 3:
limpiar( ref miPila);
break;
case 4:
imprimir(miPila);
break;
case 5: break; //salir
default:
mensaje("ERROR: la opción no es valida. Intente de nuevo.");
break;
}
}
while(opcion!=5);
mensaje("El programa a finalizado.");
}
/** añade un nuevo elemento a la pila */
static void agregar( ref Stack pila )
{
Console.Write("\n>Ingrese valor: ");
try
{
int valor = Convert.ToInt32(Console.ReadLine());
if (valor > 99 || valor <= 0)
{
mensaje("Solo números del 1 al 99");
}
else
{
pila.Push(valor);
imprimir(pila);
}
}
catch {
mensaje("Error: Solo números del 1 al 99");
}
}
/** Elimina todo los elementos de la pila */
static void limpiar( ref Stack pila )
{
pila.Clear();
imprimir(pila);
}
/** Elimina elemento de la pila */
static void eliminar( ref Stack pila)
{
if (pila.Count > 0)
{
int valor = (int)pila.Pop();
mensaje("Elemento " + valor + " eliminado");
}
else {
imprimir(pila);
}
}
/** muestra menu y retorna opción */
static int menu()
{
//Console.Clear();
Console.WriteLine("\n Stack Menu\n");
Console.WriteLine(" 1.- Agregar elemento");
Console.WriteLine(" 2.- Eliminar elemento");
Console.WriteLine(" 3.- Vaciar Pila");
Console.WriteLine(" 4.- Ver pila");
Console.WriteLine(" 5.- Termina programa");
Console.Write(" JJ:> Ingresa tu opción: ");
try
{
int valor = Convert.ToInt32( Console.ReadLine() );
return valor;
}
catch {
return 0;
}
}
/** Muestra mensaje del programa al usuario */
static void mensaje( String texto )
{
if (texto.Length > 0)
{
Console.WriteLine("\n =======================================================");
Console.WriteLine(" JJ:> {0}",texto);
Console.WriteLine(" =======================================================");
Console.WriteLine("\n JJ:>Presione cualquier tecla para continuar...");
Console.ReadKey();
}
}
/** Imprime pila */
static void imprimir(Stack pila)
{
if (pila.Count > 0)
{
Console.WriteLine("");
foreach (int dato in pila)
{
Console.WriteLine(" | |");
if( dato <10)
Console.WriteLine(" | 0{0} |", dato);
else
Console.WriteLine(" | {0} |", dato);
Console.WriteLine(" |______|");
}
Console.WriteLine("\nPresione cualquier tecla para continuar ...");
Console.ReadKey();
}
else
{
mensaje("La Pila esta vacia");
}
}
}
}