Foros del Web » Programación para mayores de 30 ;) » Java »

Invertir pila en java

Estas en el tema de Invertir pila en java en el foro de Java en Foros del Web. Hola dispongo de los siguientes metodos para crear una pila, desapilarla , saber cuala es la que esta arriba , baciarla ... Me podeis ayudar ...
  #1 (permalink)  
Antiguo 06/04/2011, 04:05
 
Fecha de Ingreso: abril-2011
Ubicación: barcelona
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Invertir pila en java

Hola dispongo de los siguientes metodos para crear una pila, desapilarla , saber cuala es la que esta arriba , baciarla ...
Me podeis ayudar a crear un metodo que invierta una pila ?
Un ejemplo es que si yo inserto la palabra HOLA que me muestre como resultado ALOH .

import java.util.*;

public class Apilar {

LinkedList pilar = new LinkedList();

public void apila(Object element)
{
pilar.addFirst(element);
}

public Object desapila()
{
return pilar.removeFirst();
}

public Object cim()
{
if(esbuida())
{
return null;
}
else
{
return pilar.getFirst();
}
}

public void inicia()
{
pilar.clear();
}


public boolean esbuida()
{
return (pilar.size()==0);
}
  #2 (permalink)  
Antiguo 06/04/2011, 05:33
 
Fecha de Ingreso: noviembre-2008
Mensajes: 59
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Invertir pila en java

Lo más sencillo, utilizar una pila nueva para almacenar los elementos, aunque no sé si te permiten hacerlo.

Código:
pila2 = new Pila();
while (!pila1.esbuida()){
pila2.apila(pila1.desapila());
}
return pila2;
  #3 (permalink)  
Antiguo 06/04/2011, 06:15
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Invertir pila en java

Si no te exigen crear tu propio algoritmo

http://download.oracle.com/javase/1....a.util.List%29
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #4 (permalink)  
Antiguo 06/04/2011, 06:43
 
Fecha de Ingreso: abril-2011
Ubicación: barcelona
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Respuesta: Invertir pila en java

Muchas gracias napar . Es exactamente lo que necesitaba . Siceramente no se me da bien java. Ara e implementado tu parte del codigo pero no me acaba de funcionar . Te pego el codigo aber si me podrias decir donde fallo porque no me da errores Jcreator xo el resultado es null xD
El fallo imagino que tiene que estar en el metodo invierte ...

import java.util.*;

public class Apilar {

LinkedList pilar = new LinkedList();

public void apila(Object element)
{
pilar.addFirst(element);
}

public Object desapila()
{
return pilar.removeFirst();
}

public Object cim()
{
if(esbuida())
{
return null;
}
else
{
return pilar.getFirst();
}
}

public void inicia()
{
pilar.clear();
}


public boolean esbuida()
{
return (pilar.size()==0);
}

//METODO INVERTIR PILA
public Object invierte() {
Apilar pila2 = new Apilar();
while (!esbuida()){
pila2.apila(desapila());
}
return pila2;
}



public static void main(String[] args)
{
//CREAMOS PILA
Apilar Pila = new Apilar();
String elemento1="H";
String elemento2="O";
String elemento3="L";
String elemento4="A";

//METEMOS EN LA PILA
Pila.apila(elemento1);
Pila.apila(elemento2);
Pila.apila(elemento3);
Pila.apila(elemento4);

//MOSTRAMOS PILA ORIGINAL
System.out.println(" Pila 1 : "+ Pila.cim());
Pila.desapila();
System.out.println(" Pila 1 : "+ Pila.cim());
Pila.desapila();
System.out.println(" Pila 1 : "+ Pila.cim());
Pila.desapila();
System.out.println(" Pila 1 : "+ Pila.cim());

//CREAMOS PILA INVERTIDA
Apilar Pila2 = new Apilar();

//METEMOS EN LA PILA
Pila2.apila(elemento1);
Pila2.apila(elemento2);
Pila2.apila(elemento3);
Pila2.apila(elemento4);

//INVERTIMOS LA PILA
Pila2.invierte();

//MOSTRAMOS PILA INVERTIDA
System.out.println(" Pila 2 : "+ Pila2.cim());
Pila.desapila();
System.out.println(" Pila 2 : "+ Pila2.cim());
Pila.desapila();
System.out.println(" Pila 2 : "+ Pila2.cim());
Pila.desapila();
System.out.println(" Pila 2 : "+ Pila2.cim());



} //FIN MAIN
}//FIN CLASE



RESULTADO :

Pila 1 : A
Pila 1 : L
Pila 1 : O
Pila 1 : H
Pila 2 : null
Pila 2 : null
Pila 2 : null
Pila 2 : null
  #5 (permalink)  
Antiguo 06/04/2011, 07:39
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: Invertir pila en java

Es que en el metodo invierte lo unico que estás haciendo es desapilar, nada más.

Tu problema es que el método desapila no devuelve la cima, y es lo que tienes que coger antes de desapilar. Vamos, el metodo sería algo así. Por cierto, mejor que devuelva una pila que no un Object (eso para todos los métodos que tengas, cuando sepas el tipo de dato que devuelve, mejor indicarlo y no poner el genérico)

Por otra parte, en tu main, estas llamando al método invierte, que devuelve la pila invertida, pero no la estás recogiendo. En el método que te pongo, el resultado de la inversión se guarda en la propia pila, no devolvería nada el método, pero tienes que tener estas cosas en cuenta.


Código Java:
Ver original
  1. public void invierte() {
  2. Apilar pila2 = new Apilar();
  3. while (!pilar.esbuida()){
  4. pila2.apila(pilar.cim());
  5. pilar.desapila();
  6. }
  7. pilar = pila2;
  8. }
  #6 (permalink)  
Antiguo 06/04/2011, 09:53
 
Fecha de Ingreso: noviembre-2008
Mensajes: 59
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Invertir pila en java

Como dice Heimish, en la progamación orientada a objetos es conveniente implementar los métodos que repercuten al objeto sobre él mismo. De esta forma, podremos actuar sobre el objeto modificándolo a nuestro gusto. Tal y como habías hecho en tu código, bastaría recoger los resultados en una pila nueva:

Código:
Apilar p = Pila2.invierte();
//Imprimir p
Sin embargo esta no es la idea de la POO. Lo ideal es ejecutar el invertir() sobre la misma pila y que este método modifique la misma. Con el código que ha puesto Heimish, se podría hacer:

Código:
Pila2.invierte();
//Imprimir Pila2
No necesitas una nueva instancia
  #7 (permalink)  
Antiguo 08/04/2011, 02:28
 
Fecha de Ingreso: abril-2011
Ubicación: barcelona
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Respuesta: Invertir pila en java

Muchas graciiiasss!!!!! Ya esta hecho !!!!
  #8 (permalink)  
Antiguo 08/04/2011, 06:16
 
Fecha de Ingreso: noviembre-2008
Mensajes: 59
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Invertir pila en java

Aquí lo tienes en recursivo:

Código Java:
Ver original
  1. public invierte(){
  2. Apilar p2 = new Apilar();
  3. invierte1(this, p2);
  4. pilar = p2;
  5. }
  6.  
  7. private void invierte1(Apilar p, Apilar p2){
  8. if(p.size() == 0)
  9. return;
  10. else{
  11. p2.apila(p.desapila());
  12. invierte1(p,p2);
  13. }
  14. }
  #9 (permalink)  
Antiguo 09/04/2011, 09:47
 
Fecha de Ingreso: abril-2011
Ubicación: barcelona
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Respuesta: Invertir pila en java

SolucionadO!

Etiquetas: invertir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:28.