La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación II Listas

Presentaciones similares


Presentación del tema: "Programación II Listas"— Transcripción de la presentación:

1 Programación II Listas
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 permite el acceso directo a un elemento
Tiene una única ventaja: permite el acceso directo a un elemento

14 Tiene múltiples desventajas

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

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

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

18 ArrayList en java

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

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

21 } Un nodo se puede crear de varias formas

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

23 null

24 Se puede crear con un objeto dentro
2 Se puede crear con un objeto dentro 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 Se puede crear con un objeto dentro y un enlace a otro nodo public NodoListaEnlazadaSimple(Object x, NodoListaEnlazadaSimple sig) { this.elemento = x; this.siguiente = sig; }

27 X Nodo siguiente

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

29 insertar un nodo siguiente
} 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 siguiente elemento X

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

32

33 Ahora la clase ListaEnlazadaSimple

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

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

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

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

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

39 Primero Cima x

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

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

42 Primero Cima Pos 1 siguiente elemento X

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

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

45 Primero Cima Pos 1

46 Para borrar un objeto específico de la lista
public Object cima(){ return v[cont-1]; } Para borrar un objeto específico de la lista //… 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--; }//…

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

48 Para buscar un objeto específico de la lista
public Object cima(){ return v[cont-1]; } Para buscar un objeto específico de la lista //… 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;

49 Las operaciones de recorrido

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

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

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

53 Ésta es la lista simplemente enlazada

54 Cada nodo tiene 1 enlace

55 Pero hay más listas …

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

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

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

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


Descargar ppt "Programación II Listas"

Presentaciones similares


Anuncios Google