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.
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