0 votos
por (60 puntos) en Javascript
Hola a todos... Soy nuevo en esto tengo una duda sobre las listas circulares doblemente enlazadas en JAVA... Es una tarea de la universidad y no entiendo. Me piden completar en codigo, y me dan las clases ListaDC, Main y Nodo...

Gracias por su ayuda


3 Respuestas

0 votos
por (8.5k puntos)
En Java existen las LinkedList, pero son lista enlazadas simplemente. En la universidad te piden que siguiendo la teoría de lo que son las lista circulares doblemente enlazadas:

http://es.wikipedia.org/wiki/Lista_%28inform%C3%A1tica%29#Lista_Enlazada_Doblemente_Circular

Hagas tu propia implementación en Java, te paso un ejemplo que he encontrado por internet, aunque te recomiendo que trates de hacer tu la implementación para entender bien está estructura de datos.

http://saforas.wordpress.com/2008/07/28/listas-circulares-simples-y-dobles-en-java/

Espero que te sirve de ayuda,

Un saludo.


0 votos
por (60 puntos)
Pero el problema es que lo que viene en esos archivos que me pasaste es muy distinto a lo que me estan dando para usar como base para implementar las listas circulares

 Adjunto parte del código:

public class ListaDC {

    private Nodo cabeza;

    private Nodo ultimo; // apunta al ultimo elemento de la lista...

    //Incluir el codigo necesario para utilizar TODOS los metodos

    //de una lista Doble Circular

    public void inserta(Nodo p) {

        if (cabeza == null) {  //Si la lista està vacìa???

            cabeza = p;

            ultimo= p;

            ultimo.setNext(cabeza);

        } else if (p.getId() < cabeza.getId()) {

            p.setNext(cabeza);

            cabeza.setBack(p);

            cabeza = p;

        } else if (cabeza.getNext() == null) {

            cabeza.setNext(p);

            p.setBack(cabeza);

        } else {

            Nodo aux = cabeza;

            while ((aux.getNext() != null) &amp;&amp; (aux.getId() <= p.getId())) {

                aux = aux.getNext();

            }

            if (aux.getId() < p.getId()) { // inserto a la derecha

                aux.setNext(p);

                p.setBack(aux);

            } else { // inserto a la izquierda..

                p.setNext(aux);

                p.setBack(aux.getBack());

                aux.setBack(p);

                p.getBack().setNext(p);

            }

        }

    }

    public boolean elimina(int n) {

        boolean result = true;

        if (cabeza == null) {  //Si la lista està vacìa???

            return false;

        } else if (n < cabeza.getId()) {

            return false;

        } else if (cabeza.getId() == n) {

            cabeza = cabeza.getNext();

            cabeza.setBack(null);

        } else {

            Nodo aux = cabeza;

            while ((aux.getNext() != null) &amp;&amp; (aux.getId() < n)) {

                aux = aux.getNext();

            }

            if (aux.getId() == n) {

                aux.getBack().setNext(aux.getNext());

                if (aux.getNext() != null) {

                    aux.getNext().setBack(aux.getBack());

                }

            }

        }

        return result;

    }

    public boolean existe(int n) { // retorna true si existe.. false sino...

        Nodo aux = cabeza;

        while (aux != null &amp;&amp; aux.getId() < n) {

            aux = aux.getNext();

        }

        return (aux != null &amp;&amp; aux.getId() == n);

    }

    public Nodo recupera(int n) { // retorna el elemento si existe... en la lista..

        Nodo aux = cabeza;

        while (aux != null &amp;&amp; aux.getId() < n) {

            aux = aux.getNext();

        }

        if (aux != null &amp;&amp; aux.getId() == n) {

            return aux;

        } else {

            return null;

        }

    }

    @Override

    public String toString() {

        Nodo aux = cabeza;

        String s = &quot;Elementos:n&quot;;

        while (aux != null) {

            s += aux + &quot;n&quot;;

            aux = aux.getNext();

        }

        return s;

    }

}


0 votos
por (8.5k puntos)
El código es distinto pero el funcionamiento es el mismo, ambas implementan Listas Circulares Doblemente Enlazadas.

Por lo que veo te dan la clase ListaDC ya implementada, tu tendrás que implementar la clase Nodo o simplemente hacer una clase de Prueba, al estilo PruebaListaCircularDE.java.

Un saludo!


Preguntas relacionadas

0 votos
0 respuestas
preguntado por yoly (20 puntos) Ene 28, 2016 en C/C++
0 votos
0 respuestas
preguntado por boris (20 puntos) Ene 28, 2016 en Java
Bienvenido a Dudas de Programación, donde puedes hacer preguntas y recibir respuestas sobre los problemas más frecuentes de los lenguajes de programación, frameworks de desarrollo y bases de datos que utilices. Foro de Línea de Código

Categorías

...