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