Descargar la presentación
La descarga está en progreso. Por favor, espere
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; }
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 :
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.