Manejo de pila LIFO

Ir abajo

Manejo de pila LIFO

Mensaje  Admin (Viruz) el Sáb Nov 17, 2012 10:23 am

Que tal amigos de Viruz Blog bueno ya después de un tiempo de no subir un programa en Java hoy les dejo un pequeño programa donde se puede usar el uso de pilas que por lo regular se ven en la materia de estructura de datos de la carrera de ingeniería en sistemas, con ello tendremos una idea mucho mas abierta de cual es su función ademas de entendimiento de como trabajan. Para ello vamos a recordar un poco sobre este tema sobre definiciones que se deben conocer.
Una pila (stack en inglés) es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés Last In First Out, último en entrar, primero en salir) que permite almacenar y recuperar datos. Esta estructura se aplica en multitud de ocasiones en el área de informática debido a su simplicidad y ordenación implícita de la propia estructura.
Para el manejo de los datos se cuenta con dos operaciones básicas: apilar (push), que coloca un objeto en la pila, y su operación inversa, retirar (o desapilar, pop), que retira el último elemento apilado.
[Tienes que estar registrado y conectado para ver esa imagen]
[Tienes que estar registrado y conectado para ver esa imagen]
Este programa esta basado en el modo de acceso de tipo LIFO, aunque se debe conocer que también existe el modo FIFO, recomiendo visitar esta entrada de la universidad de Chile donde habla sobre todos tipos de datos o al menos los más conocidos.
[Tienes que estar registrado y conectado para ver este vínculo]
¿Como funciona el Programa?

  • Para tomar nota la estructura lógica se encuentra toda en la clase Pila y para empezar se realiza un evento al botón de "Crear Pila" que se muestra en la imagen y mediante la sintaxis Integer.parseInt(valor) obtenemos el tamaño de la pila.
  • En el segundo constructor de la clase Pila pasamos el parámetro que obtuvimos anteriormente para construir un arreglo de enteros.
    elementos = new int[numElementos].
  • Para el llenado de la pila se usará el método apilar() el cual con un sumador nos indicará en donde se encuentra el indice.
  • Caso contrario se usa la misma función para quitar elementos, se usa el método desapilar().
  • Para la muestra de los elementos se realiza en un JDialog el cual dentro de un área de texto (JTextArea) se imprime el arreglo de enteros enteros.
Código

Clase Main
/**
*
* @author Ivan
*/
public class Main{
public static void main(String args[]){
(new Ventana()).setVisible(true);
}
}

Clase Pila

/**
*
* @author Ivan
*/
import javax.swing.JOptionPane;

public class Pila{
private int numElementos;
private int elementos[];
private int indice;

public Pila(int numElementos){
this.numElementos = numElementos;
indice = -1;
elementos = new int[numElementos];
}

public boolean vacia(){
return indice == -1;
}

public boolean llena(){
return indice == numElementos - 1;
}

public void apilar(int elemento){
indice++;
try{
elementos[indice] = elemento;
}
catch(Exception ex){
JOptionPane.showMessageDialog(null, "La pila se encuentra llena");
indice--;
}
}

public int desapilar(){
int elemento = elementos[indice];
indice--;
return elemento;
}

public int numElementos(){
return indice + 1;
}

public int[] imprimir(){
int valores[] = new int[numElementos];
for(int i = 0; i <= indice; i++)
valores[i] = elementos[i];

return valores;
}
}


Clase ResultadoElementos

/**
*
* @author Ivan
*/
import java.awt.Font;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class ResultadoElementos extends JDialog{
private JButton jButton1;
private JLabel jLabel1;
private JScrollPane jScrollPane1;
private JTextArea jTextArea1;

public ResultadoElementos(Frame parent, boolean modal, int elementos[]){
super(parent, modal);
initComponents();
jTextArea1.append("\n");
for(int i = elementos.length - 1; i >= 0; i--){
jTextArea1.append("\t");
jTextArea1.append(String.valueOf(elementos[i]));
jTextArea1.append("\n");
jTextArea1.append("\n");
}
}

public ResultadoElementos(Ventana aThis, boolean b, int[] imprimir) {
//super(parent, modal);
initComponents();
jTextArea1.append("\n");
for(int i = imprimir.length - 1; i >= 0; i--){
jTextArea1.append("\t");
jTextArea1.append(String.valueOf(imprimir[i]));
jTextArea1.append("\n");
jTextArea1.append("\n");
}
}

private void initComponents(){
jLabel1 = new JLabel();
jScrollPane1 = new JScrollPane();
jTextArea1 = new JTextArea();
jButton1 = new JButton();
setDefaultCloseOperation(2);
setTitle("Elementos de la pila");
jLabel1.setFont(new Font("Arial Narrow", 0, 18));
jLabel1.setText("Elementos dentro de la pila");
jTextArea1.setColumns(20);
jTextArea1.setEditable(false);
jTextArea1.setFont(new Font("Arial Unicode MS", 0, 13));
jTextArea1.setRows(5);
jScrollPane1.setViewportView(jTextArea1);
jButton1.setFont(new Font("Arial", 0, 11));
jButton1.setText("Regresar");
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt){
jButton1ActionPerformed(evt);
}

final ResultadoElementos this$0;{
this$0 = ResultadoElementos.this;
//super();
}
}
);

GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.
createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
layout.createSequentialGroup().addGap(112, 112, 112).addComponent(jLabel1)).addGroup(layout.
createSequentialGroup().addGap(160, 160, 160).addComponent(jButton1))).addContainerGap(111, 32767)).addGroup(
javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addContainerGap(86, 32767).
addComponent(jScrollPane1, -2, -1, -2).addGap(84, 84, 84)));
layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.
createSequentialGroup().addGap(37, 37, 37).addComponent(jLabel1).addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.RELATED, 69, 32767).addComponent(jScrollPane1, -2, 249, -2).addGap(56, 56, 56).addComponent(
jButton1).addGap(27, 27, 27)));
pack();
}

private void jButton1ActionPerformed(ActionEvent evt){
setVisible(false);
}
}


Clase Lectura
/**
*
* @author Ivan
*/
import javax.swing.JOptionPane;

public class Lectura{
private static int cuenta;
private static int valores[];
private static int i;

public Lectura(){
}

public static int[] leerValores(int nVeces){
valores = new int[1000];
cuenta = 0;
i = 0;
for(int n = 0; n < valores.length; n++)
valores[n] = -9999;

do{
if(cuenta >= nVeces)
break;
int numero = 0;
boolean band = false;
try{
numero = Integer.parseInt(JOptionPane.showInputDialog(null, (new StringBuilder()).append("Inserte el
valor ").append(cuenta + 1).append(" de la pila").toString()));
band = true;
}
catch(NumberFormatException numberFormatException){
JOptionPane.showMessageDialog(null, "La pila solo admite numeros enteros");
}
if(band){
valores[cuenta] = numero;
cuenta++;
}
}while(true);
return valores;
}
}

Queda pendiente la clase Ventana de ponerla en el post, pero la puedes encontrar descargando el código completo.

Descarga el código
Spoiler:
[Tienes que estar registrado y conectado para ver este vínculo]
Autor: Viruz study
Enlace: [Tienes que estar registrado y conectado para ver este vínculo]

_________________
[Tienes que estar registrado y conectado para ver esa imagen]
avatar
Admin (Viruz)
Admin

Mensajes : 148
Fecha de inscripción : 23/09/2012
Edad : 30
Localización : Desktop

http://viruz.foroactivo.mx

Volver arriba Ir abajo

gracias!

Mensaje  dlopezgo02 el Jue Nov 07, 2013 11:12 pm

Tio! Muchas gracias ! eres buenisimo ..

dlopezgo02

Mensajes : 1
Fecha de inscripción : 07/11/2013

Volver arriba Ir abajo

Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.