style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Ordenar una lista encadenada (o enlazada) alfabeticamente

Hola amigos, soy nuevo en el foro asi que no se empezar imediatamente con una pregunta este correcto pero aqui va la cuestion, tengo un problema talvez algo simple, pero no tengo idea de como hacerlo porque en cursos anteriores no lo vi, o no me toco verlo, y es ordenar de forma alfabetica una lista, y aun peor por ser una lista encadenada, intente preguntarle al maestro pero dice que no puede ayudarme en un examen (que es lo que era) y ademas lo debi preguntar ese tipos de cosas en clases no en el examen, y si le aunmentamos que el siempre nos sobreestima con nuestro conocimiento en programación. Como sea me empiezo a desviar del tema. El problema es el siguiente:

Tengo que hacer una lista encadenada simple de 6, cada uno con 3 campos (nombre del alumno, edad y no. de control), luego ordenarlos alfabericamente* (mi lio) y dividirlos en dos listas e imprimirlos.

*Todo lo demas lo tengo resuelto o almenos tengo la idea, no se si puedan ayudarme con esto.

Gracias por su atención y espero andar mucho por el foro XD.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

En terminos generales, para

En terminos generales, para ordenarlos tienes que aplicar una funcion de ordenamiento ( aunque parezca obvio ) . La más común es quicksort, pero incluso podrias ordenar usando bubble sort ( hace poco alguién puso un ejemplo de bubble sort )

La forma en la que implementes depende de como este hecha tu estructura de datos, pero básicamente tienes que comparar dos elementos y determinar cual es mayor que el otro.

¿Por que no escribes la parte relevante de tu código y podemos ver como debe de ordenarse?

Te paso el post de meztor de como hacer el ordenamiento de un arreglo usando bubble sort.

http://javamexico.org/foros/java_standard_edition/ordenamiento_burbuja

Segun recuerdo sería algo así:

<pre>
ordenar( listaEnlazada ) {

   n = listaEnlazada.size()

   for  i  = 0  hasta n  {
       for  j = i hasta n {
             si   listaElazada.elemento ( i )  >  listaEnlazada.elemento( j )  entonces
                      intercambiar( i , j )
              fin
      }
   }
}</pre>

La clave es que tu lista tenga forma de acceder al elemento "n" y que esos elementos puedan compararse entre sí, para saber cual de ellos es mayor que otro alfabeticamente.

Se me ocurre:

<pre>
class Alumno {
    String nombre;
    int numero;
    int edad;

    public boolean  esMayorQue( Alumno otro ) {
         // comparar los dos nombres.  Puedes comparar letra por letra
         // para facilitarlo, cada letra en java tiene un valor entero
        // asi puedes compara a contra b y b será mayor
        // o mejor aún, puedes utilizar la funcion "compareTo" de String
     }
}</pre>

Asi, cuando estes ordenando, puedes pedirle a un elemento que se compare contra otro y te diga cual debe de ir antes y cual despues:

<pre>
Alumno a  = Alumno("Zantiago");
Alumno b = Alumno("Alberto");

a.esMayorQue( b )  // da falso
</pre>

Pero como te digo, mejor escribe tu código para tener un entendimiento común.

Imagen de meztor

y si los ordenas en cuando los insertas

Nodo nuevo = new Nodo ();
String x;
        nuevo.info = x;
        if (raiz==null) {
            raiz=nuevo;
        } else {
            if (x.compareTo(raiz.info)<0) {
                nuevo.sig=raiz;
                raiz=nuevo;
            } else {
                Nodo recorre=raiz;
                Nodo atras=raiz;
                while ((x.compareTo(recorre.info)>=0) && recorre.sig!=null) {
                    atras=recorre;
                    recorre=recorre.sig;
                }
                if (x.compareTo(recorre.info)>0) {
                    recorre.sig=nuevo;
                } else {
                    nuevo.sig=reco;
                    atras.sig=nuevo;
                }
            }

en teoria en cuanto vas insertando los va ordenando y no seria necesario usar algun metodo de ordenamiento aunque todo es cuestion de enfoques diria mi querida maestra.
Pero si ya tienes los datos el metodo de ordenamiento de burbuja como dice OscarRys seria bueno intentaria hacerlo pero en este momento no recuerdo como extraer el tamaño de la pila(mas bien no se como extraer el tamaño de una pila) que seria lo que se ocupa basicamente para el ordenamiento tipo burbuja .
Tal vez no funcione el codigp por que lo hice aqui y no lo probe espero y te sirva por lo menos de ejemplo. En teoria deveria de funcionar .

+1 De hecho es mejor ordenar

+1 meztor. De hecho si es mejor ordenar mientras se agregan.

Para el bubble sort no se necesita una pila necesariamente ( de hecho creo que no se puede con una pila estrictamente hablando ) en fin.

Cabe hacer mención que para ambos ( ordenamiento personalizado y ordenamiento conforme va entrando ) Java tiene una solución en sus bibliotecas base:

Collections.sort( list,  comparator );

y

Set s = new TreeSet( comparator );
Imagen de rodrigo salado anaya

Compara dos caracteres.

Hola te dejo un pequeña idea de como ordenar por orden alfabético.

Pretendo demostrar que un dato de tipo char puede ser tratado con un valor de tipo numérico decimal; los valores que toma son: http://es.wikipedia.org/wiki/ASCII, entonces puedes usar ese valor y compararlos.

Por ejemplo si dos palabras empiezan con la misma letra, puedes usar la segunda letra, también puedes pasar todas las letras a mayúsculas para que no te de lata jejeje

    public static void main(String[] args) {
        String listaPalabras[] = {"tokemak", "cern", "Little", "Boy", "Fat", "Man", "Atomic"};
        char listaLetras[] = obtListaPrimeraLetra(listaPalabras);
        analizaListaLetras(listaLetras);
    }

    static char[] obtListaPrimeraLetra(String... listaPalabras) {
        int numeroPalabras = listaPalabras.length;
        char[] listaLetras = new char[numeroPalabras];
        int i = 0;
        for (; i < numeroPalabras; i++) {
            listaLetras[i] = obtPrimeraLetra(listaPalabras[i]);
        }
        return listaLetras;
    }

    static char obtPrimeraLetra(String palabra) {
        return palabra.charAt(0);
    }

    static void analizaListaLetras(char... letras) {
        int i = 0;
        int j = 0;
        int nuemroLetras = letras.length;
        for (; i < nuemroLetras; i++) {
            for (; j < nuemroLetras; j++) {
                String esMayor = esMayor(letras[i], letras[j]);
                System.out.println(esMayor);
            }
            j = 0;
        }
    }

    static String esMayor(char letra1, char letra2) {
        return letra1 < letra2
                ? "El valor de [" + letra1 + "] es menor que [" + letra2 + "] pero va primero"
                : "...";
    }

La salida queda algo como:

...
...
El valor de [A] es menor que [t] pero va primero
El valor de [A] es menor que [c] pero va primero
El valor de [A] es menor que [L] pero va primero
El valor de [A] es menor que [B] pero va primero
El valor de [A] es menor que [F] pero va primero
El valor de [A] es menor que [M] pero va primero
...
Imagen de hhle12

ayuda

hola mira qeu cosas hace la vida yo tengo el mismo problema que tu espero y alguien nos pueda ayudar yo he creado un tema nuevo donde he puesto el codigo completo con el cual estoy trabajando por si alguien puede ayudar

Me parece qe estoy reviviendo post antiguos... pero les va ayuda

Cuando se refiere a listas enlazadas... creo que esta hablando de Nodos...

Con esto podras ordenar alfabeticamente la Lista.... creo que es lo que buscan...

en Java... para comparar nodos se utiliza el siguiente metodo

int n = nodo1.nombre.compareTo(nodo1.next.nombre);

esto te va a arrojar los siguientes valores para N

si nodo1 es menor a nodo1.next

arroja -1

si son iguales

arroja 0

si es mayor

arroja 1

Creo que con este criterio de estructura de datos.... podras resolver tu duda....

Observacion:

recuerde que nodo1.nombre es la String definida como nombre del nodo

y nodo1.next.nombre va a ser la String definida como el sucesor del nodo anterior

Imagen de zeuqram91

Ayuda

hola necesito ayuda con algo parecido tengo el siguiento codigo de entrada de una lista enlazada pero necesito que al mostrarla me la ordene e igualmente un metodo que me busque otro que me modifique y otro que me elimine

if  (ae.getSource()==b1)

          {
          Nodo empleado = cabecera;

          if (empleado==null)

          {
              empleado= new Nodo();
              empleado.tele=t1.getText();
              empleado.ape=t2.getText();
              empleado.nomb=t3.getText();
              empleado.barr=t4.getText();
              empleado.edad=Double.parseDouble(t5.getText());

             empleado. sigui=null;

              cabecera= empleado;

              t1.setText(" ");
          t2.setText(" ");
          t3.setText(" ");
          t4.setText(" ");
          t5.setText(" ");
          }

          else

          {

          Nodo recorre=cabecera;

          while (recorre.sigui != null)

           
          {
              recorre=recorre.sigui;
          }
          empleado= new Nodo();
          recorre.sigui= empleado;

          empleado.tele=t1.getText();
          empleado.ape=t2.getText();
          empleado.nomb=t3.getText();
          empleado.barr=t4.getText();
          empleado.edad=Double.parseDouble(t5.getText());

          empleado. sigui=null;

          t1.setText(" ");
          t2.setText(" ");
          t3.setText(" ");
          t4.setText(" ");
          t5.setText(" ");

          }
    }
<blockcode>

Les Agradeceria quien me pueda ayudar es urgente...

¿Y la pregunta que tienes

¿Y la pregunta que tienes eeees.... cual?

Imagen de JORGE PEÑAFIEL

ayuda urgente de verdad

estoy haciendo un sistema en java soy programador ecuatoriano me encanta java pero este proyecto es super importante de eso depende mi trabajo necesito hacer un txt y mientras escriba en el txt mi base de datos tendria q cambiar conforme voy dijitando las letras la sentencia es esta
select * from tab where campo like '%abc%'
la pregunta es como le pongo en la forma pa q me funcione como la base de datos agradeceria su ayuda

¬¬O se que quieres hacer un

¬¬
Quieres hacer un cliente de SQL? :-o

Si lo lograras hacer sería tán frágil y tu trabajo aún peligraría ( o peor aún tu usuario ) porque querrias hacer eso?

Si lo único que necesitas es un cliente de base de datos te recomiendo SQuirreL SQL lleva ya varios años de desarrollo y es muy completo.

Si de verdad insistes puedes usar el demo que viene en el jdk. Entra a http://www.oracle.com/technetwork/java/javase/downloads/index.html busca la parte de demos, y ahí viene una carpeta demos/jfc/TableExample Es un ejemplo con Swing, JDBC, esta muy sencillo.

Suerte

Imagen de beto.bateria

¿En que lo estas haciendo?

¿En que lo estas haciendo? ¿swing? ¿html?

Si usas html puedes trabajar con ajax, cada vez que le textfield acepte un caracter, con javascript y ajax lo mandas al un servlet, el servlet recibe ese string y hace la consulta, regresas la informacion en el formato adecuado, trata de mandar un numero no muy grande, por ejemplo 8 registros.

Hermano me acabas de salvar

Hermano me acabas de salvar la vida!!! jaja fijate que solo me registre
para darte las gracias!!!! no sabes como necesitaba ese algoritmo ya
que todo l oque encontraba en youtube y en google era ordenar alfeticamente
pero manejando arreglos!!!
Muchas gracias y saludos!!

sobre completamientos

Estos codigo som muy buenos pero si lo hicieras en bes de buscar el ordenamiento como si fueran nodos como kedaria????

Hola @yferro No entiendo...

Hola @yferro No entiendo a qué te estás refiriendo.

¿Crees que puedas aclarar un poco más tu pregunta? :)

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">