590 likes | 744 Views
Igor Santos Grueiro. Programación II Listas. Ya conocemos las listas. Listas de amigos. Listas de compras. ¿ Qué es una lista?. Una lista es un conjunto de elementos homogéneo que cumple :. El orden relativo de estos elementos es significativo. (1,2,3). (1,3,2). !=.
E N D
Igor Santos Grueiro Programación IIListas
Ya conocemos las listas
El orden relativo de estos elementos es significativo (1,2,3) (1,3,2) !=
Pueden haber elementos repetidos (1,2,2,2,2,2,2,3)
Ya sabemos utilizar la lista enlazada
Pero, ¿cómose implementa por dentro?
Una lista se puede construir: De forma estática De forma dinámica
Una lista se puede implementar de forma estática mediante un array
Tiene una única ventaja: permite el acceso directo a un elemento
1 El tamaño de la lista tiene que ser fijo y conocido en tiempo de compilación
2 En las inserciones y borrados, hay que provocar un desplazamiento de elementos que repercute en el tiempo de ejecución
3 Se desaprovecha el espacio de la memoria real, en el caso de lista cortas
Para una lista dinámica, de nuevo Nodo Nodo siguiente Object elemento
} Tiene los siguientes atributos public class NodoListaEnlazadaSimple { private Object elemento; privateNodoListaEnlazadaSimplesiguiente; }
} Un nodo se puede crear de varias formas
1 Se puede crear vacío publicNodoListaEnlazadaSimple(){ this.elemento = null; this.siguiente = null; }
2 Se puede crear con un objeto dentro publicNodoListaEnlazadaSimple(Object x) { this.elemento = x; this.siguiente = null; }
3 Se puede crear con un objeto dentro y un enlace a otro nodo • publicNodoListaEnlazadaSimple(Object x, NodoListaEnlazadaSimplesig) { • this.elemento = x; • this.siguiente = sig; • }
} Getters y Setters para el valor del objeto y para el nodo siguiente
} Podemos insertar un nodo siguiente al nodo publicvoidinsertarSig(Object x){ NodoListaEnlazadaSimplenuevoNodo = newNodoListaEnlazadaSimple(); nuevoNodo.elemento = x; nuevoNodo.siguiente = this.siguiente; this.siguiente = nuevoNodo; }
siguiente elemento X
} Podemos borrar el siguiente nodo publicvoidborrarSig(){ this.siguiente = this.siguiente.siguiente; }
} publicclassListaEnlazadaSimple { privateNodoListaEnlazadaSimpleprimero; privateNodoListaEnlazadaSimplerecorrido; privateinttamanyo; publicListaEnlazadaSimple(){ this.primero = null; this.recorrido = null; this.tamanyo = 0; } }
Para vaciar el primer nodo y el recorrido a null //… publicvoidvaciar(){ this.primero = null; this.recorrido = null; this.tamanyo = 0; } //…
Para comprobar si una lista está vacía comprobamos si el primero es null //… publicbooleanestaVacia (){ return(this.primero == null); } //…
public Object cima(){ return v[cont-1]; } También, podemos recuperar el número de elementos insertados en la lista //… public inttamanyo(){ returntamanyo; } //…
public Object cima(){ return v[cont-1]; } Podemos insertar un objeto en la primera posición de la lista //… publicvoidinsertarPrimero(Object x) { primero = newNodoListaEnlazadaSimple(x, primero); this.tamanyo++; } //…
Primero Cima x
public Object cima(){ return v[cont-1]; } Necesitaremos acceder al nodo en cierta posición de la lista //… privateNodoListaEnlazadaSimpledevuelvePos(int pos) { NodoListaEnlazadaSimpletemp = primero; for (int i = 1; i <= pos; i++) { temp = temp.getSiguiente(); } returntemp; }//…
public Object cima(){ return v[cont-1]; } Para insertar un objeto en cierta posición de la lista //… publicvoidinsertarPos(Object x, int pos) { if (pos == 0) primero = newNodoListaEnlazadaSimple(x, primero); else devuelvePos(pos - 1).insertarSig(x); tamanyo++; } //…
Primero Cima Pos 1 siguiente elemento X
public Object cima(){ return v[cont-1]; } Para modificar un objeto en cierta posición de la lista //… publicvoidmodificarPos(Object x, int pos) { NodoListaEnlazadaSimpletemp = devuelvePos(pos); temp.setElemento(x); } //…
public Object cima(){ return v[cont-1]; } Para borrar un objeto en cierta posición de la lista //… publicvoidborrarPos(int pos) { if (pos == 0) primero = primero.getSiguiente(); else { NodoListaEnlazadaSimpletemp = devuelvePos(pos - 1); temp.borrarSig(); } tamanyo--; }//…
Primero Cima Pos 1
public Object cima(){ return v[cont-1]; } Para borrar un objeto específico de la lista //… publicvoid borrar(Object x) { NodoListaEnlazadaSimpleant = null; NodoListaEnlazadaSimpletemp = 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--; } }//…
public Object cima(){ return v[cont-1]; } Podemos devolver un elemento en cierta posición //… publicObjectextraerPos(int pos) { returndevuelvePos(pos).getElemento(); }//…
public Object cima(){ return v[cont-1]; } Para buscar un objeto específico de la lista //… publicint buscar(Object x) { int i = 0; NodoListaEnlazadaSimpletemp = primero; while ((i < tamanyo) && (!temp.getElemento().equals(x))) { temp = temp.getSiguiente(); i++; } if (i >= tamanyo) return -1; else return i; } //…
public Object cima(){ return v[cont-1]; } Podemos iniciar un recorrido por la lista //… publicvoidinicioRecorrido() { recorrido = primero; }//…