La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Listas Dinámicas.

Presentaciones similares


Presentación del tema: "Listas Dinámicas."— Transcripción de la presentación:

1 Listas Dinámicas

2 Listas Listas  Arrays Operaciones Tipos de listas
Listas son flexibles y permiten cambio de implementación Operaciones Insertar, Borrar, Modificar, etc. Tipos de listas Simples Ordenadas Pilas Colas Doblemente enlazadas (LDE) Circulares

3 TAD Lista Simple: operaciones
Creación de una lista crearLista (nombreLista) Comprobación del estado listaLlena (nombreLista)  Booleano listaVacia(nombreLista)  Booleano listaVacia (referenciaNodo)  Booleano Inserción de nodos Insertar (nombreLista, valorInfo, posicion) Insertar (nombreLista, valorInfo) Borrado de nodos Borrar (nombreLista, valorInfo) Búsqueda de un nodo Buscar (nombreLista, dato)  informacion Buscar (nombreLista, dato)  referenciaNodo Pertenece (nombreLista,informacion)  Booleano Recorrido de la lista recorrer(nombreLista) Acceso a los nodos Info (referenciaNodo)  Informacion Siguiente (referenciaNodo)  enlace Modificación de los nodos asignarInfo (referenciaNodo, valorInformacion) asignarEnlace (referenciaNodo, valorEnlace)

4 Definición de la lista Se compone de nodos enlazados.
Se debe hacer en una clase separada. Sólo requiere conocer dónde se encuentra el primer nodo de la lista. Para el nombre de la referencia al primer nodo se hace uso de la metáfora: “cabeza de la lista” o “inicio”. Una lista vacía comenzaría con un valor null en el campo sig (siguiente)

5 ¿Qué es un Nodo? Un nodo es un registro con varios campos: unos campos de datos y un campo apuntador. Los primeros son información y el último es una referencia al siguiente nodo de la lista. El último nodo de la lista contiene una referencia siguiente "null".

6 Clase nodo public class Nodo { int data; // almacena el dato
Nodo sig; //”liga” al próximo nodo } El campo data representa los datos que almacena el nodo. Puede ser de diferentes tipos de datos, además que éste puede contener la cantidad de datos que se ocupen.

7 Listas sig

8 Creación de una lista Lista vacía

9 Inserción de un nodo CASO 1. Inserción al principio de la lista

10 Caso 1. Inserción al principio
Insertarinicio (inicio, info) //este algoritmo inserta un nodo al inicio de la lista// (nuevo: del tipo inicio) 1-     crear (nuevo); 2-     hacer nuevo.dato = info nuevo.sig = inicio inicio = nuevo

11 Caso 2. Inserción en medio de la lista
Caso 2.1 Insertar antes de Caso Insertar después de info Ref nuevo inicio aux

12 Caso Insertar antes de InsertAntes (inicio, info, ref) //aux,nuevo,T son variables de tipo inicio. OK es una variable boolean 1- hacer aux = inicio, Ok = verdadero 2- mientras (aux.dato != ref) y (Ok == verdadero) Si aux.sig != null T = aux, aux = aux.sig. Sino OK = falso  3- Si Ok = = verdadero //se encontró el dato Crear (nuevo) nuevo.dato = info nuevo.sig =aux Si aux = = inicio //es el primer nodo entonces inicio = nuevo si no T.sig = nuevo

13 Caso 2.2 InsertDespues InsertDespues (inicio, info, Ref)
//nuevo y aux so n variables del tipo de inicio, OK es boolean  1- aux = inicio, OK = verdadero  2- Mientras (aux.dato != ref) y (OK == verdadero) hacer si aux.sig != null entonces aux = aux.sig si no OK = Falso 3- Si OK = = verdadero entonces crear (nuevo) nuevo.dato = info nuevo.sig = aux.sig aux.sig = nuevo

14 Caso 3. Inserción al final de la lista
Insertafinal (inicio, info) // nuevo y T son del tipo inicio 1- Hacer T = inicio 2- mientras T.sig != null recorrer la lista hasta llegar al final 3-  Crear (nuevo) 4-   nuevo.dato = info nuevo.sig = null T.sig = nuevo

15 Eliminar Nodos Casos 1 Eliminar el primer nodo
Elimina primero (inicio)  // Se redefine el apuntador inicio. //aux es del tipo inicio 1- hacer Q = inicio; 2- Si aux.sig != null //que si hay mas de un elemento Entonces inicio = aux.sig Sino inicio = null 3- aux = null //quita aux

16 Caso 2 Eliminar en medio Caso 2.1 Elimina nodo con X información
EliminaNodoX (inicio, x) //aux y T son variables del mismo tipo de inicio, Ok es boolean 1- Hacer aux = inicio , Ok = verdadero 2- Repetir mientras (aux.dato != x) y (Ok) hacer Si aux.sig != null //hay más nodos entonces T = aux, aux = aux.sig si no Ok = falso 3- Si Ok == falso entonces //el elemento x no existe si no si inicio == aux //x es el primer elemento de la lista entonces inicio = aux.sig si no T.sig = aux.sig   aux = null

17 Caso 2.2 Elimina nodo antes de X información
Algoritmo EliminaAntesX (inicio, x)  //aux , T y R son variables del mismo tipo de inicio (apuntador), Ok es boolean 1- Si inicio.dato == x entonces //no hay nodo que precede a x sino aux = inicio; T = inicio; Ok = falso; mientras (( aux.info!=x) y (!Ok)) si aux.sig != null entonces R = T; T = aux; aux= aux.sig; si no Ok = verdadero;  2- Si Ok entonces //el elemento x no existe si no si inicio.sig = aux //el elemento a eliminar es el primero entonces inicio = aux sino R.sig = aux; T = null; R T aux inicio X

18 Caso 3 Elimina ultimo nodo
Elimina ultimo (inicio)  //Se pone un null en el campo sig del penúltimo elemento y se quita el ultimo. //aux, T son del mimo tipo que inicio 1. Si inicio.sig == null //que la lista tiene un solo elemento Entonces inicio = null //quita (inicio) Si no aux = inicio 2. Mientras aux.sig != null hacer T = aux aux = aux.sig  3. T.sig = null //quita T aux = null //quita aux

19 Recorrido de una lista dinámica
Metodo Correlista (Nodo inicio); //imprime cada dato de la lista  { nodo aux = new nodo(); aux = inicio; while (aux.sig != null) { escribir (aux.dato); aux = aux.sig; }

20 Buscar un nodo con alguna característica
Método Busca (Nodo inicio, info){ //Devuelve exito con falso o verdadero nodo aux = new nodo(); boolean exito = falso aux = inicio; while (aux.sig != null && aux.dato != info) aux = aux.sig; if ( aux.dato = = info ) exito = verdadero; return exito }


Descargar ppt "Listas Dinámicas."

Presentaciones similares


Anuncios Google