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"); } } } }