Autor Tema: Listas enlazadas java  (Leído 11871 veces)

bartvander

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 15
    • Ver Perfil
Listas enlazadas java
« en: 08 de Marzo 2013, 17:18 »
Estoy estudiando las listas en lazadas y me gustaría que me ayudaseis a resolver estas dudas:

tengo este trozo de código de un constructor para una lista y actual sería el primer elemento a menos que la lista este vacía.

public ListaEnlazarIter (ListaEnlazada unaLista)
{
      laLista = unaLista;
      actual = laLista.esVacia() ?
                 unalista.cabecera  :  unaLista.cabecera.siguiente;
}

Tengo dudas sobre como funcionaría este código. No se que significa el símbolo interrogación en el código. Los : de la linea final se que se utilizan en iteradores, pero no se que es lo que hace en esa última linea.

A ver si podéis aclarare un poco. Gracias.

« Última modificación: 05 de Septiembre 2014, 10:20 por Alex Rodríguez »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:Listas enlazadas
« Respuesta #1 en: 08 de Marzo 2013, 20:46 »
Parece que estuvieras trabajando con java, pero a su vez parece que estás mezclando código con pseudocódigo

laLista.esVacia() en principio es una invocación a un método que devuelve true si la lista está vacía o false si la lista no está vacía

Si quieres escribirlo como código java sería:

actual = laLista.esVacia(); De este modo actual queda con un valor true o false.

Respecto a la lista enlazada hay varias formas de plantearlo, la expresión unalista.cabecera  :  unaLista.cabecera.siguiente; también parece pseudocódigo y estaría diciendo que una lista está compuesta de dos partes: la cabecera que es un elemento individual de la lista junto a un puntero, y un puntero al siguiente elemento de la lista, que es el puntero que tiene la cabecera.

Lo que no tengo claro es si estás trabajando con java o con otro lenguaje. Si es con java el código que has puesto no tiene sentido, ni el interrogante ni los dos puntos.

Con java una lista enlazada recursiva en realidad no trabajaría con punteros. Supón que vas a crear una lista enlazada de enteros: declararías una clase donde sus campos serían

private Integer cabecera;
private ListaEnlazada<Integer> siguiente;

De este modo cada elemento de la lista está compuesto por un valor entero (cabecera) y por un objeto ListaEnlazada (esto es una estructura de datos recursiva, es decir, tienes dentro de la clase que declaras el mismo tipo de dato que define la clase: una referencia a otro objeto de la clase).

Si cabecera == null y siguiente == null la lista está vacía,

Si cabecera == un valor cualquiera y siguiente == una referencia cualquiera, estamos en un elemento intermedio de la lista

Si cabecera == un valor cualquiera y siguiente == null estamos en el último elemento de la lista enlazada.


bartvander

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 15
    • Ver Perfil
Re:Listas enlazadas
« Respuesta #2 en: 11 de Marzo 2013, 16:01 »
El código es Java y está sacado del libro tal cual. Es el capitulo donde se estudian listas enlazadas. Pero según lo explican... ahora mismo no se como funcionaría una lista enlazada. Porque estoy totalmente perdido. Los ejemplos que pone la verdad que me tienen muy confundido.

Si pudieras darme algún enlace de un tutorial donde lo explique algo mejor, le echo un vistazo.

nosferacento

  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 443
    • Ver Perfil
Re:Listas enlazadas
« Respuesta #3 en: 12 de Marzo 2013, 12:14 »
Yo creo también que no es código Java ¿De qué libro y asignatura estamos hablando? Aquí te dejo un ejemplo simplificado de lista enlazada codificada en Java. Son pocas líneas de código pero entenderlas suele llevar un buen rato. Las claves están en que:

- La estructura de datos (la clase) es recursiva, contiene una referencia a un objeto del mismo tipo que define la clase.


- Al añadir un elemento a la lista hace falta que first tome el valor u objeto a añadir y que la cola (tail) pase a ser lo que antes era la lista (para ello necesitamos crear una lista nueva que sea una copia de la lista existente antes de añadir el elemento)

- Tenemos que recorrer la lista recursivamente para mostrarla

Código de la clase (simplificación de lista enlazada):

Código: [Seleccionar]
public class listaEnlazadaEnteros<Integer> {

    private Integer first;
    private listaEnlazadaEnteros<Integer> tail;
    //https://www.aprenderaprogramar.com/foros/index.php?topic=503.0

    //Construye una lista enlazada vacía
    listaEnlazadaEnteros() {
        first = null;
        tail = null;
    }

    public boolean isEmpty () {
        if ( first==null && tail ==null ) {return true;} else {return false;}
    }

    public void addElement (Integer element) {
        listaEnlazadaEnteros<Integer> siguiente = new listaEnlazadaEnteros<Integer>();
        siguiente.first = first;
        siguiente.tail = tail;
        first = element;
        tail = siguiente;
    }

    public String toString (listaEnlazadaEnteros<Integer> listaRecibida) {

        if (listaRecibida.getFirst() == null && listaRecibida.getTail() == null) { return "fin";}
        else if (listaRecibida.getFirst() != null && listaRecibida.getTail() == null) { return listaRecibida.getFirst().toString();}
        else { return listaRecibida.getFirst().toString() + ", " + toString(listaRecibida.getTail());}

    }

    public Integer getFirst() { return first;}

    public listaEnlazadaEnteros getTail() { return tail;}

}

Código test para hacer pruebas:

Código: [Seleccionar]
public class testListaEnlazada {
    //https://www.aprenderaprogramar.com/foros/index.php?topic=503.0

    public static void main (String [] Args) {

        listaEnlazadaEnteros listaTest = new listaEnlazadaEnteros();

        System.out.println ("Representación de la lista enlazada: "+ listaTest.toString(listaTest));
        listaTest.addElement(Integer.valueOf(3));
        System.out.println ("Representación de la lista enlazada: "+ listaTest.toString(listaTest));
        listaTest.addElement(Integer.valueOf(-5));
        System.out.println ("Representación de la lista enlazada: "+ listaTest.toString(listaTest));
        listaTest.addElement(Integer.valueOf(64));
        listaTest.addElement(Integer.valueOf(8));
        System.out.println ("Representación de la lista enlazada: "+ listaTest.toString(listaTest));
    }

}


 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".