PILAS CON LISTAS ENLAZADAS EJEMPLOS

Una pila es una estructura de datos o colección ordenada de elementos a los cuales se puede acceder por un único lugar o extremo llamado cima.
Las entradas de la pila debe ser eliminadas en el orden inverso al que se situaron en la misma.
Como por ejemplo: Tenemos libros los cuales están apilados.

como podemos apreciar el primer libro insertado es  lenguaje, y para poderlo sacar tenemos que sacar los libros que están sobre este, entonces  el primer libro insertado  sera el ultimo en salir, y el ultimo libro insertado sera el primero en salir (libro de programación).
Debido a la propiedad especifica ultimo en entrar, primero en salir se conoce a las pilas como estructuras de datos LIFO(last-in-first-out).
Operaciones Básicas con Pilas.
Las operaciones que se suelen usar con pilas son las siguientes:

  • Insertar(Push): Se añade un elemento en la cima de la pila.
  • Quitar(Pop): Elimina o saca un elemento de la pila.
  • Cima: Devuelve el elemento que esta en la cima de la Pila.
  • Pila vacía: Comprueba si la pila esta vacía.
  • Vaciar pila: Quita todos los elementos de la pila.
  • Tamaño de la Pila(Count): Numero de elementos que contiene la pila.
  • Buscar: permite encontrar un elemento de la pila.
Para utilizar pilas con listas enlzadas las operaciones son las mismas, la diferencia esta en que solo se ingresan valores al inicio. Creacion del nodo de la Pila:
 package Entidades;


public class Nodo {
    public int info;//Informacion
    public Nodo sgte;//puntero que apunta al suguiente nodo
    public Nodo()//Constructor vacio
    {
        
    }
    public Nodo(int x){//Constructor con parametros
        info = x; //se asgna la variable x al nodo 
        sgte=null; // siguiente es null
    }  
}
Creacion de la lista que utilizara la Pila
package Entidades;

import javax.swing.JOptionPane;

public class Pila {//Ultimo en entrar primero en salir
    private Nodo cab;//Declaramos la cabezera del nodo
   
    public Pila(){//Constructor vacio
    }
    public boolean isVacia(){//metodo de la pila si esta vacia
        boolean vacia = false;//declara vacia falso
        if(cab == null)
        {
            vacia=true;
        }
        return vacia;
    }
    public Pila Push(int x){//Insertar
        Nodo nuevo = new Nodo(x);//Se crea un nuevo nodo
        if(isVacia()){//si esta vacia
            cab = nuevo;//cabecera es igual a un nuevo nodo
        }
        else
        {
            nuevo.sgte = cab; 
            cab = nuevo;
        }
        return this;
    }
    public void Visulaizar(){
        Nodo n;
        String men=" ";
        n = cab;
        while (n != null) {
            men = men + "\n [ " + n.info + " ] " + "\n";
            n = n.sgte;
        }
        JOptionPane.showMessageDialog(null, men);
    }
    public void Pop(){//Elimina un elemento de la pila
        Nodo n;
        if(!isVacia()){
            n = cab;
            cab = cab.sgte;
            n.sgte = null;
            JOptionPane.showMessageDialog(null,"Elemento Eliminado");
        }
        else
            JOptionPane.showMessageDialog(null," Pila Vacia");
    }
    public void VaciaPila(){
            Nodo n;
            while(!isVacia()){
                n = cab;
                cab = cab.sgte;
                n.sgte = null;
            }          
             JOptionPane.showMessageDialog(null," Pila Vacia");
    }
    public int count()
    {
        Nodo n;
        int x = 0;
        n = cab;
        while(n!= null)
        {
            x++;
            n = n.sgte;
        }
        return x;
    }
    public Nodo BuscarPila(int dato){
        Nodo indice;
        for(indice = cab; indice != null; indice = indice.sgte)
        {
            if(dato == indice.info)
            {
                JOptionPane.showMessageDialog(null, "Encontrado");
                return indice;
            }
            else{
                JOptionPane.showMessageDialog(null, "El numero no existe");
                return indice;
            }
        }
        return null;
    }
    public Nodo Cima()
    {
        return cab;//en la cima siempres esta cabezera
    }
    public void OrdenarSeleccion() {//Se ordena por edad

        Nodo indice, subindice; 
        Nodo indiceMenor;
        
        for (indice = cab; indice != null; indice = indice.sgte) {
            indiceMenor = indice;
            for (subindice = indice.sgte; subindice != null; subindice = subindice.sgte) 
            {
                if (indiceMenor.info > subindice.info )
                {
                    indiceMenor = subindice;
                }
            }
            if (indice != indiceMenor) {
                intercambio(indice, indiceMenor);
            }
        }
    }
      public void intercambio(Nodo i, Nodo j) {
        int aux;
        aux = (int) i.info;
        i.info = j.info;
        j.info = aux;
    }
}
Metodo main de la Pila
package apppilas;

import Entidades.Pila;
import java.util.Scanner;
import javax.swing.JOptionPane;


public class AppPilas {
   
    public static void main(String[] args) {
        // TODO code application logic here
        Scanner entrada = new Scanner(System.in);
        int n,opc = 0;
        Pila op=new Pila();
        do{
             opc=Integer.parseInt(JOptionPane.showInputDialog( "[1]Insertar"  + "\n"+"[2]visualizar"+"\n"+
                "[3]Eliminar un elemento"+"\n"+"[4]Vaciar Pila"+"\n"+"[5]Contar Elementos"+"\n"+"[6]Buscar Pila"+"\n"+"[7]Cima"+"\n"+"[8]Oredenar Pila"+"\n"+"[9]salir"+"\n"));
         switch(opc){
           case 1: n = Integer.parseInt(JOptionPane.showInputDialog( "ingresar numero"));
               op.Push(n);
               break;
           case 2:
               op.Visulaizar();
               break;
           case 3:
               op.Pop();//Eliminar un elementos
               break;
           case 4:
               op.VaciaPila();
               break;
           case 5 :
               JOptionPane.showMessageDialog(null, op.count());
               break;
           case 6:
              
               n = Integer.parseInt(JOptionPane.showInputDialog( "ingresar numero a buscar"));
               JOptionPane.showMessageDialog(null,op.BuscarPila(n).info);
               
               break;
           case 7:
               JOptionPane.showMessageDialog(null,op.Cima().info);
               break;
           case 8:
               op.OrdenarSeleccion();
               op.Visulaizar();
               break;
         }
        }while(opc !=9);
    }
}
Ejercicio 1: Realizar un programa que permita ingresar los exponentes de un polinomio en una Pila, y se pueda ingresar la base, y obtener la suma total del polinomio:
base: 2
Exponentes : 1,2,3
2^1 + 2^2 + 2^3 = 14

Ejercicio 2: Realizar la suma de 2 pilas y guardar los resultados en una tercera Pila.
A      B       C
2       2   =  4
3       3   =  6
4            =  4
5            =  5

No hay comentarios.:

Publicar un comentario