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

metodo ordenar para la clase lista

Estas en el tema de metodo ordenar para la clase lista en el foro de Java en Foros del Web. Hola que tal tengo una lista doble y quiero crear un metodo que se llame ordenar void Ordenar(){ } y cuando ejecute este metodo se ...
  #1 (permalink)  
Antiguo 05/11/2011, 23:30
 
Fecha de Ingreso: noviembre-2011
Mensajes: 2
Antigüedad: 12 años, 5 meses
Puntos: 0
Exclamación metodo ordenar para la clase lista

Hola que tal tengo una lista doble y quiero crear un metodo que se llame ordenar

void Ordenar(){

}

y cuando ejecute este metodo se ordene la lista utilizando el metodo de ordenamiento MergeSort alguien me puede ayudar o darme una pista de como intercambiar los nodos gracias..!!

Aqui esta el Codigo:


Clase Nodo.java
Código PHP:
public class Nodo <T>{
    private 
T obj;
    private 
Nodo siguiente;
    private 
Nodo anterior;

    public 
Nodo(T o){
        
obj=o;
        
siguiente=null;
    }

    public 
Nodo() {
        
obj=null;
        
siguiente=null;
    }

    public 
Nodo(T o,Nodo s) {
        
obj=o;
        
siguiente=s;
    }

    public 
T getObjeto(){
        return 
obj;
    }

    public 
Nodo getSiguiente(){
        return 
siguiente;
    }

    public 
void setSiguiente(Nodo s){
        
siguiente=s;
    }


    public 
Nodo getAnterior(){
        return 
anterior;
    }

    public 
void setAnterior(Nodo a){
        
anterior=a;
    }




Clase ListaOrdenada.java
Código PHP:
public class ListaOrdenada <T>{
    private 
Nodo tope,inicio;
    private 
int tamano;

    public 
ListaOrdenada(T o) {
        
Nodo nodo=new Nodo(otope);
        
nodo.setAnterior(null);
        
tope=nodo;
        
inicio=tope;
        
tamano=1;
        
//System.out.println("Anterior: "+nodo.getAnterior()+" Nodo: "+nodo+" Siguiente: "+nodo.getSiguiente());
    
}

    
void insertarFinal(T o){
        
Nodo aux=new Nodo(o);
        
aux.setAnterior(tope);
        
tope.setSiguiente(aux);
        
tope=aux;
        
tamano++;
        
//System.out.println("Anterior: "+aux.getAnterior()+" Nodo: "+aux+" Siguiente: "+aux.getSiguiente());
    
}

    
void insertar(T o,int pos){
        if (
pos <= getTamano() + 1)    {
            
Nodo aux = new Nodo (o);
            if (
pos == 1){
                
aux.setSiguiente(inicio);
                if (
inicio!=null)
                    
inicio.setAnterior(aux);
                
inicio aux;
            } else
                if (
pos == getTamano() + 1)    {
                    
Nodo recorrer inicio;//nuevo nodo para el objeto en la ultima posicicion
                    
while (recorrer.getSiguiente() != null) {
                        
recorrer recorrer.getSiguiente();
                    }
                    
                    
recorrer.setSiguiente(aux);
                    
aux.setAnterior(recorrer);
                    
aux.setSiguiente(null);
                    
tope=aux;
                } else {
                    
Nodo recorrer inicio;//para enontrar el nodo de la posicionespecificada
                    
for (int f <= pos f++)
                        
recorrer recorrer.getSiguiente();
                    
Nodo siguiente recorrer.getSiguiente();
                    
recorrer.setSiguiente(aux);
                    
aux.setAnterior(recorrer);
                    
aux.setSiguiente(siguiente);
                    
siguiente.setAnterior(aux);
                }
            
tamano++;
        }
    }

    
void eliminarUltimo(){
        
tope=tope.getAnterior();
        
//tope.setSiguiente(null);
        
tamano--;
    }

    
void eliminar(int n){
        if(-
1!=buscar(n)){
            if (
<= getTamano ())    {
                if (
== 1) {
                    
inicio inicio.getSiguiente();
                } else {
                    
Nodo aux;
                    
aux inicio;
                    for (
int i <= i++)
                        
aux aux.getSiguiente();
                    
Nodo prox aux.getSiguiente();
                    
aux.setSiguiente(prox.getSiguiente());
                }
                
tamano--;
            }
        }
        else
            
System.out.println("ERROR: El numero no esta en el Rango de la Lista");
    }

    
int buscar(int n){
        if(
n>&& n<tamano+1)
            return 
n;
        return -
1;
    }

    
boolean vacia(){
        return (
inicio==null);
    }

    
Vector mostrar(){
        
Vector<Tvect=new Vector<T>();
        if(
tamano!=0) {
            
Nodo aux inicio;
            for(
int i 0this.tamanoi++) {
                
vect.add((Taux.getObjeto());
                
//System.out.println(aux.getObjeto());
                
System.out.println(" pos:"+(i+1)+" Anterior: "+aux.getAnterior()+" Nodo: "+aux+" Siguiente: "+aux.getSiguiente());
                
aux=aux.getSiguiente();
            }
            return 
vect;
        }
        else
            
System.out.println("La Lista Esta Vacia");
        return 
null;
    }

    
int getTamano(){
        return 
tamano;
    }


Clase Main
Código PHP:
    public static void main(String[] args) {
        
// TODO code application logic here
        
ListaOrdenada<Integerlista=new ListaOrdenada<Integer>(6);
        
lista.insertar(12);
        
lista.insertarFinal(4);
        
lista.insertar(31);
        
lista.insertar(110);
        
        
lista.ordenar();
        
System.out.print(lista.mostrar());

    } 
  #2 (permalink)  
Antiguo 06/11/2011, 22:05
 
Fecha de Ingreso: noviembre-2011
Mensajes: 2
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: metodo ordenar para la clase lista

Hola realizado la solucion ordenando de menor a mayor..!!


Código PHP:
    void Ordenar(){
        
Nodo recorrer=iniciocomparar;
        for(
int i=0;i<tamano-1;i++){
            
comparar=recorrer.getSiguiente();
            for(
int j=i+1;j<tamano;j++){
                if(
recorrer.getObjeto().toString().compareTo(comparar.getObjeto().toString())>0){
                    
Nodo aux=comparar;
                    
comparar=recorrer;
                    
recorrer=aux;                 

                    if(
j-i==1){
                        
Nodo recorrerAnt=comparar.getAnterior(),compararSig=recorrer.getSiguiente();
                        
recorrer.setAnterior(comparar.getAnterior());
                        
comparar.setSiguiente(recorrer.getSiguiente());
                        
comparar.setAnterior(recorrer);
                        
recorrer.setSiguiente(comparar);

                        
recorrerAnt.setSiguiente(recorrer);
                        
compararSig.setAnterior(comparar);

                    }
                    else{
                        
Nodo recorrerAnt=comparar.getAnterior(),recorrerSig=comparar.getSiguiente();
                        
Nodo compararAnt=recorrer.getAnterior(),compararSig=recorrer.getSiguiente();

                        
recorrer.setSiguiente(recorrerSig);
                        
recorrer.setAnterior(recorrerAnt);

                        
comparar.setSiguiente(compararSig);
                        
comparar.setAnterior(compararAnt);

                        
recorrerAnt.setSiguiente(recorrer);
                        
recorrerSig.setAnterior(recorrer);

                        
compararAnt.setSiguiente(comparar);
                        
compararSig.setAnterior(comparar);
           

                    }
                }

              
comparar=comparar.getSiguiente();
            }
            
recorrer=recorrer.getSiguiente();
        }
    } 
  #3 (permalink)  
Antiguo 07/11/2011, 07:10
 
Fecha de Ingreso: enero-2011
Mensajes: 51
Antigüedad: 13 años, 3 meses
Puntos: 21
Respuesta: metodo ordenar para la clase lista

Visita este enlace amigo

http://es.wikipedia.org/wiki/Ordenamiento_por_mezcla

No se bieen si podrás acoplar la solución a tu problema de listas enlazadas, pero allí hay códigos en varios lenguajes, incluido Java, espero te sirva.

Etiquetas: clase, lista, metodo, string
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 02:32.