1 / 51

Lista s Dinámicas

Lista s Dinámicas. Listas. Listas  Arrays 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. TAD Lista Simple : operaciones.

obelia
Download Presentation

Lista s Dinámicas

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Listas Dinámicas

  2. Listas • Listas  Arrays • 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 ListaSimple: operaciones

  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. sig sig sig Listas

  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. inicio aux nuevo Ref info Caso 2. Inserción en medio de la lista Caso 2.1 Insertar antes de Caso 2.2 Insertar después de

  12. Caso 2.1Insertar 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.1Elimina 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. X R T aux inicio Caso 2.2Elimina 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;

  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 }

  21. Filas Dinámicas

  22. dato dato dato dato sig sig sig sig Características de una Fila • El primer elemento en llegar es el primero en servir (FIFO Frist In Frist Out). • El ultimo en llegar se agrega al final • El apuntador posee la dirección del siguiente nodo • El apuntador puede ser null o puede apuntar al siguiente nodo • Esta estructura se utiliza en : • Simulaciones • Sistemas operativos etc…

  23. Operaciones de una Fila • Crearfila (nodo inicio) • Agregarfila (nodo inicio, int dato) • QuitarFila (nodo inicio) • Vacio (nodo inicio)

  24. Clase nodo public class Nodo { int dato;// 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.

  25. incio sig Crea fila creaFila (nodo i){ nodo inicio = new nodo(); inicio = i; }

  26. null incio dato sig sig Agregar a una Fila un nodo Agrega(nodo inicio, int dato){ Si inicio.sig = null entonces inicio.sig = nuevo; Sino { nodo p = nuevo nodo(); p.sig = inicio.sig mientas(p.sig!= null) p = p.sig;} }

  27. incio dato dato dato sig sig sig sig Eliminar un elemento de la Fila int quitar(nodo inicio){ int d = -1; Si inicio.sig == null; regresa d; Sino { d = inicio.sig.dato; inicio.sig = inicio.sis.sig; } Regresa d; } null

  28. null incio dato dato dato sig sig sig sig Vaciar una fila Boolean vacia(nodo inicio){ Boolean vacia = false; Si inicio = null Regresa true Sino Regresa vacia }

  29. Pilas Dinámicas

  30. Características • Se remueve del tope y se agrega en el tope de la pila (LIFO Last In Frist Out). Operaciones Creapila (nodo inicio) Quitar (nodo inicio) = pop Agregar (nodo inicio, int dato) = push Vacia (nodo inicio)

  31. null incio sig Crear una Pila creaPila (nodo i){ Nodo inicio = new nodo(); inicio = i }

  32. nuevo null incio dato dato dato sig sig sig sig Agregar un nodo a la Pila (push) agregaNodo (nodo inicio, int dato){ nodo nuevo = new nodo() nuevo.dato = info nuevo.sig = inicio.sig; inicio.sig = nuevo }

  33. incio dato dato dato sig sig sig sig Quitar elemento de la Pila (pop) int pop (nodo inicio){ int d = -1; Si inicio.sig == null; regresa d; Sino { d = inicio.sig.dato; inicio.sig = inicio.sis.sig; } Regresa d; }

  34. incio dato dato dato sig sig sig sig Para verificar si un apila esta vacía Boolean vacia(nodo inicio){ Boolean vacia = false; Si inicio != null Regresa true Sino Regresa vacia }

  35. Lista doblemente enlazada

  36. Nodo public class Nodo { private int data; // al macena el dato private Nodo sig;//”liga” al próximo nodo private Nodo ant; // ”liga” al anterior nodo } sig ant

  37. sig ant Inicio fin Operaciones de una lista doblemente enlazada • Añadir o insertar elementos. • Buscar elementos. • Borrar elementos. • Moverse a través de la lista, siguiente y anterior.

  38. Añadir elemento a una lista vacía 1-nodo = anterior y nodo=siguiente a NULL.

  39. Nuevo nodo … null 1 Dato Dato Dato 2 3 Insertar nuevo nodo Caso 1 Insertar nodo en la primera posición insertaNodo( nodo) 1-. Nodo=siguiente // debe apuntar a Lista. 2-. Nodo=anterior y Lista=anterior. 3-. Lista=anterior //debe apuntar a nodo.

  40. 2 Dato Dato Dato Dato 1 null 3 Caso 2 Insertar un elemento en la última posición InsertarUltimo(nodo) 1-. Nodo=siguiente y Lista=siguiente (NULL). 2-. Lista=siguiente // debe apuntar a nodo. 3-. Nodo=anterior //apuntará a Lista.

  41. null 4 Dato Dato Dato Dato 3 2 1 Caso 3 Insertar un nodo en medio. InsertarMedio (nodo ) 1-. Nodo=siguiente apunte a lista=siguiente. 2-. Lista=siguiente //apunte a nodo. 3-. Nodo=anterior //apunte a lista. 4-. Nodo=siguiente=anterior // apunte a nodo.

  42. Eliminar Caso 1 Eliminar el único nodo En este caso, ese nodo será el apuntado por Lista. 1-. Eliminamos el nodo. 2-. Hacemos que Lista apunte a NULL.

  43. Caso 2Caso 2.1Eliminar el primer nodo eliminaPrimer( nodo) 1-. Si nodo apunta a Lista // hacemos que Lista apunt Lista=siguiente. 2-. Hacemos que nodo=siguiente=anterior// apunte a NULL 3-. Borramos el nodo apuntado por nodo.

  44. Caso 2.2 Eliminar un nodo intermedio eliminaMedio(nodo) 1-. Si nodo apunta a Lista Lista=siguiente 2-. nodo= siguiente 3-. Nodo = anterior 4-. Borramos el nodo apuntado por nodo

  45. Caso 3 Eliminar el último nodo eliminaUltimo(nodo) 1-. Si nodo apunta a Lista Lista=anterior. 2-nodo=anterior=siguiente apunte a NULL 3-. Borramos el nodo apuntado por nodo.

  46. Lista Circular

  47. inicio fin Circular • Una lista circular es una lista lineal en la que el último nodo a punta al primero.

  48. Operaciones de una lista circular las operaciones que se pueden realizar sobre las listas circulares : • Añadir o insertar elementos. • Buscar o localizar elementos. • Borrar elementos. • Moverse a través de la lista

  49. Insertar un elemento Insertar elemento en la lista vacía • lista apunta a nodo. • lista->siguiente apunte a nodo. Insertar elemento en una lista no vacía • Hacemos que nodo = siguiente apunte a lista = siguiente. • Después que lista = siguiente apunte a nodo.

  50. Eliminar un elemento de la lista • Eliminar el único nodo de la lista. • lista = siguiente mientras lista = siguiente sea distinto de nodo. • Hacemos que lista = siguiente apunte a nodo = siguiente. • Eliminamos el nodo. • Eliminar un nodo en una lista circular con más de un elemento • Borramos el nodo apuntado por lista. • Hacemos que lista valga NULL.

More Related