• WORD
  • FORMATO AUTOMATICO Y ESTILOS
  • INSERTAR CUADRO DE TEXTO Y ECUACION
  • REFERENCIASTABLA DE CONTENIDO Y BIBLIOGRAFIA
  • Ir a Prácticas
  • EXCEL
  • FORMULAS I y II
  • TABLAS Y GRAFICOS DINAMICOS
  • SUBTOTALES Y BASE DE DATOS
  • MACROS
  • Ir a Prácticas
  • AUTOCAD
  • 2D:DIBUJO Y ACOTAR
  • INSERTAR BLOQUES Y PLOT
  • 3D: MODELADO Y EDICION DE SOLIDOS
  • RENDER Y ANIMACIONES
  • Ir a Prácticas

viernes, 27 de febrero de 2026

C# PILAS Y COLAS

 PILAS

 

Las pilas (Stack<T>) en C# son colecciones genéricas que siguen el principio LIFO (Last In, First Out), donde el último elemento en entrar es el primero en salir. Se definen en System.Collections.Generic, permitiendo añadir (Push), eliminar (Pop) y mirar (Peek) elementos eficientemente en tiempo

, ideales para deshacer acciones o recursividad.

bravedeveloper.com

bravedeveloper.com

 +4

Características y Operaciones Principales:

LIFO: El elemento en la cima es el primero en salir.

Push(T item): Añade un elemento a la parte superior.

Pop(): Elimina y devuelve el elemento superior.

Peek(): Devuelve el elemento superior sin eliminarlo.

Count: Obtiene el número de elementos.

Clear(): Elimina todos los elementos.

CODIGO:

using System;

 

// 1. CLASE NODO - Igual que en la cola

public class Nodo

{

    public int dato;

    public Nodo siguiente;

 

    public Nodo(int valor)

    {

        dato = valor;

        siguiente = null;

    }

}

 

// 2. CLASE PILA - Solo necesita UN puntero

public class PilaSimple

{

    private Nodo cima;  // Único puntero necesario (topo de la pila)

 

    // 3. CONSTRUCTOR

    public PilaSimple()

    {

        cima = null;    // Pila vacía

    }

 

    // 4. PUSH - Agrega a la CIMA O(1)

    public void Push(int valor)

    {

        Nodo nuevo = new Nodo(valor);    // Nuevo nodo

        nuevo.siguiente = cima;          // Apunta a la cima anterior

        cima = nuevo;                    // Nuevo nodo es la nueva cima

    }

 

    // 5. POP - Quita de la CIMA O(1)

    public int Pop()

    {

        if (cima == null)

        {

            Console.WriteLine("Pila vacía");

            return -1;

        }

 

        int valor = cima.dato;          // Guardar valor de la cima

        cima = cima.siguiente;          // Bajar una posición

        return valor;                   // Devolver elemento quitado

    }

 

    // 6. PEEK - Ver cima sin quitar

    public int Peek()

    {

        if (cima == null)

        {

            Console.WriteLine("Pila vacía");

            return -1;

        }

        return cima.dato;

    }

 

    // 7. MOSTRAR - De cima hacia abajo

    public void Mostrar()

    {

        Nodo actual = cima;

        Console.Write("Pila: ");

       

        while (actual != null)

        {

            Console.Write(actual.dato + " ← ");

            actual = actual.siguiente;

        }

        Console.WriteLine("null");

    }

}

 

// 8. PRUEBA

class Program

{

    static void Main()

    {

        PilaSimple pila = new PilaSimple();

       

        pila.Push(10);

        pila.Push(20);

        pila.Push(30);

        pila.Mostrar();  // Pila: 30 ← 20 ← 10 ← null

 

        pila.Pop();      // Quita 30

        pila.Mostrar();  // Pila: 20 ← 10 ← null

    }

}

 

APLICACIÓN DE COLAS



CLASE NODO:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace SISTEMA_DE_COLAS

{

    public class Nodo

    {

        public int dato;

        public Nodo siguiente;

 

        public Nodo(int valor)

        {

            dato = valor;

            siguiente = null;

        }

    }

 

}

CLASE COLAS:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace SISTEMA_DE_COLAS

{

    public class Cola

    {

        private Nodo inicio;

        private Nodo fin;

        private int tamaño;

 

        public Cola()

        {

            inicio = null;

            fin = null;

            tamaño = 0;

        }

 

        public void Encolar(int valor)

        {

            Nodo nuevo = new Nodo(valor);

            if (estaVacia())

            {

                inicio = nuevo;

                fin = nuevo;

            }

            else

            {

                fin.siguiente = nuevo;

                fin = nuevo;

            }

            tamaño++;

        }

 

        public int Desencolar()

        {

            if (estaVacia())

            {

                System.Windows.Forms.MessageBox.Show("¡La cola está vacía!");

                return -1;

            }

            int valor = inicio.dato;

            inicio = inicio.siguiente;

            if (inicio == null) fin = null;

            tamaño--;

            return valor;

        }

 

        public int Peek()

        {

            if (estaVacia())

            {

                System.Windows.Forms.MessageBox.Show("¡La cola está vacía!");

                return -1;

            }

            return inicio.dato;

        }

 

        public bool estaVacia() => inicio == null;

        public int Tamano() => tamaño;

 

        public string Mostrar()

        {

            if (estaVacia()) return "Cola vacía";

 

            System.Text.StringBuilder sb = new System.Text.StringBuilder();

            Nodo actual = inicio;

            while (actual != null)

            {

                sb.Append(actual.dato + " ");

                actual = actual.siguiente;

            }

            return sb.ToString().Trim();

        }

    }

 

}

FORM1:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

 

namespace SISTEMA_DE_COLAS

{

    public partial class Form1 : Form

    {

        private Cola miCola;  // ← Esta línea es OBLIGATORIA

 

        public Form1()

        {

            InitializeComponent();

            miCola = new Cola();  // Inicializar la cola

            ActualizarInterfaz();

        }

 

        private void btnEncolar_Click(object sender, EventArgs e)

        {

            if (int.TryParse(txtNumero.Text, out int numero))

            {

                miCola.Encolar(numero);  // Ahora sí reconoce miCola

                txtNumero.Clear();

                ActualizarInterfaz();

            }

            else

            {

                MessageBox.Show("¡Ingrese un número válido!");

            }

        }

 

        private void btnDesencolar_Click(object sender, EventArgs e)

        {

            int resultado = miCola.Desencolar();

            if (resultado != -1)

            {

                MessageBox.Show($"Elemento removido: {resultado}");

                ActualizarInterfaz();

            }

        }

 

        private void btnPeek_Click(object sender, EventArgs e)

        {

            int primero = miCola.Peek();

            if (primero != -1)

            {

                MessageBox.Show($"Primer elemento: {primero}");

            }

        }

 

        private void btnLimpiar_Click(object sender, EventArgs e)

        {

            miCola = new Cola();  // Reinicia la cola

            ActualizarInterfaz();

        }

        private void ActualizarInterfaz()

        {

            lstCola.Items.Clear();

            lstCola.Items.Add(miCola.Mostrar());

            lblTamano.Text = $"Tamaño: {miCola.Tamano()}";

            txtNumero.Focus();

        }

    }

}

 

No hay comentarios.:

Publicar un comentario