Jump to content

problema con pilas y colas en java :(


Recommended Posts

hola a todos, tengo una pilla hecha en java y ahora tengo que hacer una cola y nose si tendria que modificar el pop para sacar un elemento del otro lado, y los otros metodos dejarlos igual :/ ojala puedan ayudarme :) gracias :)

aca les dejo la Pila u.u

 

 

public class Pila{

Nodo_Cabeza P=new Nodo_Cabeza();

Pila(){

 

}

public boolean Empty(){

if(P.Tope==null && P.Fin==null)

return(true);

else

return(false);

}

 

public void Push(Objeto x){

Nodo p=new Nodo(x);

if(Empty())

P.Tope=P.Fin=p;

else{

p.sgte=P.Tope;

P.Tope=p;

}

}

public Objeto Pop(){

Nodo p;

if(Empty()){

System.out.println("Error de Sistema... Volcado de Pila");

return(null);

}

else{

p=P.Tope;

if(P.Tope==P.Fin)

P.Tope=P.Fin=null;

else

P.Tope=p.sgte;

p.sgte=null;

return(p.info);

}

}

 

public Objeto Top(){

Nodo p;

if(Empty()){

System.out.println("Error de Sistema... Volcado de Pila");

return(null);

}

else

return(P.Tope.info);

}

 

 

}

Edited by huesitowarez
Link to comment
Share on other sites

Obviamente en vez de pop, se llamará dequeue, y tendría que sacar los elementos del otro extremo. El método Empty debería llamarse Is_empty() o similar para que se entienda mejor lo que hace.

 

Yo hace un tiempo implementé una lista dinámica en Java, el objetivo era hacer algo similar al arraylist, pero sin usar arrays. Acá te dejo el código, puedes modificarlo para hacer tanto una pila como una cola:

 

 

/*lista.java
* Métodos implementados:
* insertar con add(), tanto en posición específica como al final por default.
* eliminar con remove() en una posición específica.
* obtener el tamaño con size()
* cambiar un valor en una posición específica con set()
*
* faltan y son importantes:
* contain()
* clone()
* append()
*
* Autor: Erasmo Marín G.
* Licencia: GPL, osea, si lo modificas o usas, no puedes borrar el copyright.
*/
public class lista<E> implements Comparable<E>{
protected E element;
protected lista<E> nodo;
private static int size = 1;
//constructor
public lista(E element){
this.set(element);
this.nodo = null;
}
public void add(E element){
if (element==null) return;
lista<E> aux=this;
while(aux.getNext() != null) aux=aux.getNext();
aux.nodo = new lista<E>(element);
size++;
}
public void add(int index, E element){

if (element==null) return;
lista<E> nuevo = new lista<E>(element);
lista<E> aux=this;

if(index==0) {
 this.add(1,this.element);
 this.element = element;
}
else{
 for(int i=0;i<index-1;i++) aux=aux.getNext();
 nuevo.nodo = aux.nodo;
 aux.nodo = nuevo;
 size++;
}
}

private lista<E> getNext(){
return this.nodo;
}
@SuppressWarnings("static-access")
protected lista<E> getNodo(int index){
lista<E> aux=this;
//recordatorio: agregar los throw
if(index<0 || index>aux.size) return null;
for(int i=0;i<index;i++) aux=aux.getNext();
return aux;
}
protected E getElement() {
return element;
}
protected void set(E element) {
this.element = element;
}
public void set(int index  /*from 0 to .size()*/, E element){
this.getNodo(index).set(element);
}

@SuppressWarnings("static-access")
public E get(int index /*from 0 to .size()*/){
lista<E> aux=this;
//recordatorio: agregar los throw
if(index<0 || index>aux.size) return null;
for(int i=0;i<index;i++) aux=aux.getNext();
return aux.getElement();
}
public void remove(int index /*from 0 to .size()*/){
//recordatorio: agregar los throw
if(index<0) return;
lista<E> aux=this;

if(index==0) {
 this.element = this.nodo.element;
 this.remove(1);
}
else{
 for(int i=0;i<index-1;i++) aux=aux.getNext();
 aux.nodo = aux.nodo.nodo;
 size--;
}
}
//FIXME - equals sólo comprueba referencias, por lo que si se ingresa una copia, no lo eliminará
public void remove(E element){

for(int i=0;i<size;i++){
 //acá hay que mejorar el código para hacerlo más óptimo
 if(this.element.equals(element)){
  this.remove(i);
 }
}

}
//

public int getSize() {
return size;
}
@Override
public int compareTo(E arg0) {
// TODO Auto-generated method stub
return 0;
}
}

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...