sábado, 21 de marzo de 2009

Pilas


PILAS


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. Se aplica en multitud de ocasiones en informática debido a su simplicidad y ordenación implícita en 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.
En cada momento sólo se tiene acceso a la parte superior de la pila, es decir, al último objeto apilado (denominado TOS, Top of Stack en inglés). La operación retirar permite la obtención de este elemento, que es retirado de la pila permitiendo el acceso al siguiente (apilado con anterioridad), que pasa a ser el nuevo TOS.
Por analogía con objetos cotidianos, una operación apilar equivaldría a colocar un plato sobre una pila de platos, y una operación retirar a retirarla.


EJEMPLO 1:

package pila;
import java.io.*;

public class Pila{
public static BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
public static final int MAX_LENGTH = 5;
public static String Pila[] = new String[MAX_LENGTH];
public static int cima = -1;


public static void main(String args[])throws IOException{

Menu();
}
public static void Menu()throws IOException{
System.out.println("\n\n\t\t\t=========Menu Manejo Pila=============");
System.out.println("\t\t\t= =");
System.out.println("\t\t\t= 1- Insertar elemento =");
System.out.println("\t\t\t= 2- Eliminar elemento =");
System.out.println("\t\t\t= 3- Buscar elemento =");
System.out.println("\t\t\t= 4- Imprimir pila =");
System.out.println("\t\t\t= 5- Actualizar valor en pila =");
System.out.println("\t\t\t= 6- Salir =");
System.out.println("\t\t\t======================================");
System.out.print("\t\t\tOpcion: ");
int op = Integer.parseInt(entrada.readLine());
Opciones(op);

}
public static void Opciones(int op)throws IOException{
switch(op){
case 1: Insertar();
break;
case 2: Eliminar();
break;
case 3: Buscar();
break;
case 4: Imprimir();
break;
case 5: Actualizar();
break;
case 6: System.exit(1);
break;
default:Menu();
break;
}
}
public static void Insertar()throws IOException{

System.out.print("\nDigite algo para la pila: ");
String dato = entrada.readLine();
Crear(dato);
}
public static void Crear(String dato)throws IOException{
if ((Pila.length-1)==cima){
System.out.println("Capacidad de la pila al limite\n\n\n");
Imprimir();
}else{
++cima;
}
Agregar(dato);
}
public static void Agregar(String dato)throws IOException{
Pila[cima]=dato;
Menu();
}
public static void Imprimir()throws IOException{
for(int i=Pila.length-1;i>=0;i--){
System.out.println(Pila[i]);
}
Menu();
}
public static void Eliminar()throws IOException{
if(cima== -1){
System.out.println("\n\n\nNo se puede eliminar, pila vacia !!!" );
}else{
Pila[cima] = null;
--cima;
}
Menu();
}
public static void Buscar()throws IOException{
System.out.println("\n\n\nDigite la cadena a buscar: ");
String cad = entrada.readLine();
for(int i=0;iif(cad.equals(Pila[i])){
System.out.println("Elemento encontrado,posicion "+i);
break;
}else{
System.out.println("Elemento no encontrado :(");
}
}
Menu();
}
public static void Actualizar()throws IOException{
System.out.print("Digite el nombre del valor que desea actualizar: ");
String actual = entrada.readLine();
System.out.print("Digite el nombre del nuevo valor: ");
String nuevo = entrada.readLine();
for(int i=0;iif(actual.equals(Pila[i])){
Pila[i]=nuevo;
break;
}else{
System.out.println("Elemento no encontrado :(");
}
}
Menu();
}
}
EJEMPLO 2:


package bolitas;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Bolita {
private int x;
private int y;
private JPanel panel;
private Color color;
public Bolita(Color col, JPanel panel2) {
color = col;
panel = panel2;
}
public void modPos(int x_, int y_){
x = x_;
y = y_;
}
public void paint (Graphics g){
g = panel.getGraphics();
g.setColor(color);
g.fillOval(x,y,20,20);
}
public void setXORMode( Graphics g ){
g = panel.getGraphics();
g.fillOval(x,y,20,20);
g.clearRect(x, y, 20, 20);
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
}



package bolitas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;
public class InterfazPilaDeBolitas extends javax.swing.JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
private JButton apilar;
private static JPanel panel;
private JButton desapilar;
private PilaDeBolitas p;
private static Graphics g=null;
{
//Set Look & Feel
try {
javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());
} catch(Exception e) {
e.printStackTrace();
}
}
public void paint(Graphics g) {
super.paint(g);
p.paint(g);
}
/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
InterfazPilaDeBolitas inst = new InterfazPilaDeBolitas();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public InterfazPilaDeBolitas() {
super();
initGUI();
p= new PilaDeBolitas();
}
private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);
{
apilar = new JButton();
getContentPane().add(apilar);
apilar.setText("Apilar");
apilar.setBounds(56, 230, 167, 43);
apilar.addActionListener(this);
}
{
desapilar = new JButton();
getContentPane().add(desapilar);
desapilar.setText("Desapilar");
desapilar.setBounds(340, 230, 167, 43);
desapilar.addActionListener(this);
}
{
panel = new JPanel();
getContentPane().add(panel);
panel.setBounds(41, 28, 467, 168);
}
pack();
this.setSize(566, 335);
} catch (Exception e) {
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent v) {
if(v.getSource()==apilar){
try{
Bolita b = new Bolita(Color.red, panel);
p.apilar(b);
b.paint(g);
}
catch(PilaDeBolitas.OverFlowException e2){
JOptionPane.showMessageDialog(null, "La pila ya se lleno", "OverFlowException",JOptionPane.WARNING_MESSAGE);
try{
panel.paint(g);
}catch(Exception e){
}
}
}
else if (v.getSource()==desapilar) {
try{
Bolita r = p.desapilar();
r.setXORMode(g);
}
catch(Exception e2){
JOptionPane.showMessageDialog(null, "La pila esta vacia", "OverFlowException",JOptionPane.WARNING_MESSAGE);
try{
panel.repaint();
}catch(Exception e){
}
}
}
}
}

package bolitas;
import java.awt.*;
public class PilaDeBolitas {
private static final long serialVersionUID = 1L;
public static final int MAX = 10;
public class UnderFlowException extends Exception{
private static final long serialVersionUID = -9026952799388596808L;
}
public class OverFlowException extends Exception{
private static final long serialVersionUID = -5485402241073047658L;
}
// Atributos
private Bolita [] bolitas; // Arreglo que contiene los elementos
private int tope;
public int getTope() {
return tope;
}
public void paint(Graphics g) {
for(int i = 0; i < tope; i++){
bolitas[i].paint(g);
}
}
public void setXORMode(Graphics g) {
for(int i = 0; i < tope; i++){
bolitas[i].setXORMode(g);
}
}
public Bolita getTopeBolita(){
return bolitas[getTope()];
}
public PilaDeBolitas(){
//super("SUPER PAINT",false,false,false,false);
bolitas = new Bolita [MAX];
tope = 0;
}
public void apilar(Bolita b) throws OverFlowException{
if(tope + 1 >= MAX){
throw new OverFlowException();
}
if(tope==-1){
tope = 0;
}
bolitas[tope] = b;
tope++;
b.modPos(tope * 20 + 40, 100);
}
public Bolita desapilar() throws UnderFlowException {
if(tope + 1 < 0){
throw new UnderFlowException();
}
Bolita c;
tope--;
c = bolitas[tope];
while(c.getX()==-40){
c.modPos(-(tope*20+40),100);
break;
}
return c;
}
}
EJEMPLO 3:

package piladinero;
import java.io.*;
public class Dineroc {
public static void main(String[] args) throws IOException{
int b200,b100,b50,b20,b10,m5,m2,m1,n,r;
String cad="";
InputStreamReader dsf;
BufferedReader buffer;
dsf=new InputStreamReader(System.in);
buffer=new BufferedReader(dsf);
System.out.print("INGRESE CANTIDAD DE DINERO:");
cad=buffer.readLine();
n=Integer.parseInt(cad);
b200=n/200;
r=n%200;
b100=r/100;
r=r%100;
b50=r/50;
r=r%50;
b20=r/20;
r=r%20;
b10=r/10;
r=r%10;
m5=r/5;
r=r%5;
m2=r/2;
r=r%2;
m1=r/1;
r=r%1;
System.out.println("Billete de 200 :"+b200);
System.out.println("Billete de 100:"+b100);
System.out.println("Billete de 50:"+b50);
System.out.println("Billete de 20 :"+b20);
System.out.println("Billete de 10:"+b10);
System.out.println("moneda de 5:"+m5);
System.out.println("moneda de 2:"+m2);
System.out.println("moneda de 1:"+m1);
}
}

No hay comentarios:

Publicar un comentario