La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Igor Santos Grueiro. Ya conocemos las listas Listas de amigos.

Presentaciones similares


Presentación del tema: "Igor Santos Grueiro. Ya conocemos las listas Listas de amigos."— Transcripción de la presentación:

1 Igor Santos Grueiro

2 Ya conocemos las listas

3 Listas de amigos

4 Listas de compras

5 ¿ Qué es una lista?

6 Una lista es un conjunto de elementos homogéneo que cumple :

7 El orden relativo de estos elementos es significativo (1,2,3) (1,3,2) !=

8 Pueden haber elementos repetidos (1,2,2,2,2,2,2,3)

9 Ya sabemos utilizar la lista enlazada

10 Pero, ¿ cómo se implementa por dentro?

11 Una lista se puede construir: De forma estática De forma dinámica

12 Una lista se puede implementar de forma estática mediante un array

13 Tiene una única ventaja: permite el acceso directo a un elemento

14 Tiene múltiples desventajas

15 El tamaño de la lista tiene que ser fijo y conocido en tiempo de compilación 1

16 En las inserciones y borrados, hay que provocar un desplazamiento de elementos que repercute en el tiempo de ejecución 2

17 Se desaprovecha el espacio de la memoria real, en el caso de lista cortas 3

18 ArrayList en java

19 Para una lista dinámica, de nuevo Object elemento Nodo siguiente Nodo

20 public class NodoListaEnlazadaSimple { private Object elemento; private NodoListaEnlazadaSimple siguiente; } } Tiene los siguientes atributos

21 } Un nodo se puede crear de varias formas

22 Se puede crear vacío 1 public NodoListaEnlazadaSimple(){ this.elemento = null; this.siguiente = null; }

23 null

24 Se puede crear con un objeto dentro 2 public NodoListaEnlazadaSimple(Object x) { this.elemento = x; this.siguiente = null; }

25 x

26 Se puede crear con un objeto dentro y un enlace a otro nodo 3 public NodoListaEnlazadaSimple(Object x, NodoListaEnlazadaSimple sig) { this.elemento = x; this.siguiente = sig; }

27 X Nodo siguiente

28 } Getters y Setters para el valor del objeto y para el nodo siguiente

29 } Podemos insertar un nodo siguiente al nodo public void insertarSig(Object x){ NodoListaEnlazadaSimple nuevoNodo = new NodoListaEnlazadaSimple(); nuevoNodo.elemento = x; nuevoNodo.siguiente = this.siguiente; this.siguiente = nuevoNodo; }

30 elemento siguiente X

31 } Podemos borrar el siguiente nodo public void borrarSig(){ this.siguiente = this.siguiente.siguiente; }

32

33 Ahora la clase ListaEnlazadaSimple

34 public class ListaEnlazadaSimple { private NodoListaEnlazadaSimple primero; private NodoListaEnlazadaSimple recorrido; private int tamanyo; public ListaEnlazadaSimple(){ this.primero = null; this.recorrido = null; this.tamanyo = 0; } }

35 //… public void vaciar(){ this.primero = null; this.recorrido = null; this.tamanyo = 0; } //… Para vaciar el primer nodo y el recorrido a null

36 //… public boolean estaVacia (){ return (this.primero == null); } //… Para comprobar si una lista está vacía comprobamos si el primero es null

37 //… public int tamanyo(){ return tamanyo; } //… También, podemos recuperar el número de elementos insertados en la lista public Object cima(){ return v[cont-1]; }

38 //… public void insertarPrimero(Object x) { primero = new NodoListaEnlazadaSimple(x, primero); this.tamanyo++; } //… Podemos insertar un objeto en la primera posición de la lista public Object cima(){ return v[cont-1]; }

39 PrimeroCima x

40 //… private NodoListaEnlazadaSimple devuelvePos(int pos) { NodoListaEnlazadaSimple temp = primero; for (int i = 1; i <= pos; i++) { temp = temp.getSiguiente(); } return temp; } //… Necesitaremos acceder al nodo en cierta posición de la lista public Object cima(){ return v[cont-1]; }

41 //… public void insertarPos(Object x, int pos) { if (pos == 0) primero = new NodoListaEnlazadaSimple(x, primero); else devuelvePos(pos - 1).insertarSig(x); tamanyo++; } //… Para insertar un objeto en cierta posición de la lista public Object cima(){ return v[cont-1]; }

42 elemento siguiente X PrimeroCimaPos 1

43 //… public void modificarPos(Object x, int pos) { NodoListaEnlazadaSimple temp = devuelvePos(pos); temp.setElemento(x); } //… Para modificar un objeto en cierta posición de la lista public Object cima(){ return v[cont-1]; }

44 //… public void borrarPos(int pos) { if (pos == 0) primero = primero.getSiguiente(); else { NodoListaEnlazadaSimple temp = devuelvePos(pos - 1); temp.borrarSig(); } tamanyo--; }//… Para borrar un objeto en cierta posición de la lista public Object cima(){ return v[cont-1]; }

45 PrimeroCimaPos 1

46 //… public void borrar(Object x) { NodoListaEnlazadaSimple ant = null; NodoListaEnlazadaSimple temp = primero; while ((temp != null) && (!temp.getElemento().equals(x))) { ant = temp; temp = temp.getSiguiente(); } if (temp != null) { if (temp == primero) primero = temp.getSiguiente(); else ant.setSiguiente(temp.getSiguiente()); tamanyo--; } }//… Para borrar un objeto específico de la lista public Object cima(){ return v[cont-1]; }

47 //… public Object extraerPos(int pos) { return devuelvePos(pos).getElemento(); }//… Podemos devolver un elemento en cierta posición public Object cima(){ return v[cont-1]; }

48 //… public int buscar(Object x) { int i = 0; NodoListaEnlazadaSimple temp = primero; while ((i < tamanyo) && (!temp.getElemento().equals(x))) { temp = temp.getSiguiente(); i++; } if (i >= tamanyo) return -1; else return i; } //… Para buscar un objeto específico de la lista public Object cima(){ return v[cont-1]; }

49 Las operaciones de recorrido

50 //… public void inicioRecorrido() { recorrido = primero; }//… Podemos iniciar un recorrido por la lista public Object cima(){ return v[cont-1]; }

51 //… public Object getElemento() { Object x = recorrido.getElemento(); recorrido = recorrido.getSiguiente(); return x; }//… Podemos seguir avanzando por la lista public Object cima(){ return v[cont-1]; }

52 //… public boolean finRecorrido() { return (recorrido == null); } //… Podemos saber si hemos acabado el recorrido public Object cima(){ return v[cont-1]; }

53 Ésta es la lista simplemente enlazada

54 Cada nodo tiene 1 enlace

55 Pero hay más listas …

56 Cada nodo tiene 2 enlaces Listas doblemente enlazadas Optimizan la inserción por el medio de la lista

57 Podemos mejorar la inserción al final añadiendo una referencia al nodo final Lista con inserción por el final PrimeroÚltimo

58 Y aún hay más Listas circularesPueden ser simplemente o doblemente enlazadas

59 Ejercicio Realizar listas: Simplemente enlazada Simplemente enlazada con inserción al final :


Descargar ppt "Igor Santos Grueiro. Ya conocemos las listas Listas de amigos."

Presentaciones similares


Anuncios Google