Listas Dinámicas.

Slides:



Advertisements
Presentaciones similares
Arreglos Unidimensionales y Bidimensionales ESTRUCTURAS DE DATOS I
Advertisements

Definición Las colas ofrecen dos operaciones fundamentales, que son encolar (al final de la cola) y desencolar (del comienzo de la cola). Al igual que.
PILA.
ESTRUCTURA DE DATOS Unidad 04 Árboles BINARIOS DE BUSQUEDA.
Pilas y Colas Fundamentos Estructuras de Datos (Programación 2)
ÁRBOLES EN C UNIVERSIDAD “ALONSO DE OJEDA” Facultad de Ingeniería
TDA LISTA ESTRUCTURAS DE DATOS.
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Listas enlazadas c++ Prof. Franklin Cedeño.
Tema 3: La estructura de datos Lista
Programación II Listas
Estructuras de datos y algoritmos
Estructura de Datos En C++
Programación y Estructuras de Datos
Árboles binarios. Algoritmos básicos
Tratamiento de listas en Java
PROGRAMACION DE Pilas o Stacks y Colas
Estructuras de Datos Especificación formal de Listas.
Programación II Colas Igor Santos Grueiro.
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Colas y Listas Enlazadas
Almacenamiento y Recuperacion de Información TAD_ABB Ana Lilia Laureano Cruces Universidad Autónoma Metroplotiana.
Estructuras dinámicas de datos, TAD Lista, parte 2
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
Pilas Una pila es una estructura lineal de elementos en donde se pueden agregar o eliminar datos únicamente por uno de los dos extremos. En consecuencia.
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Listas circulares.
ÁRBOLES BINARIOS DE BÚSQUEDA
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
ESTRUCTURAS DE DATOS I Conocer, comprender y analizar algunos de los principales tipos de estructuras de datos.
7.  El TDA Diccionario.
Estructura de Datos y Algoritmos
Estructura de Datos En C++
Listas enlazadas.
Pila1UVM Pilas. Pila2UVM Pila3UVM 2.1 Objetivos El estudiante manejará el tad Pila contigua.
Pilas y Colas Estructuras de Datos.
Árboles Binarios Estructuras de Datos.
LISTA DOBLEMENTE ENLAZADA
Clasificación de los TDA
Computación I Primer Semestre 2006 Capítulo IV Ciclos y Colecciones (con un sabor a algoritmos)
Universitarios: Ricardo Gonzales Jimenez Wilfredo Coca Reinaldo Yohan Docente: Lic. Israel Torrez Valverde Tema: Listas doblemente Enlazadas.
PILAS Una pila es una estructura de datos o lista de elementos, a la cual se le puede insertar o eliminar su contenido sólo por uno de sus extremos, llamado.
Grafos..
Unidad 4: LISTAS.
Punteros Recomendado: 1. Nivelación Funciones
Son estructuras de datos que almacenan y recuperan sus elementos atendiendo a un estricto orden (LIFO Last – in, first –out Ultimo en entrar – primero.
Punteros, referencias Listas enlazadas Arboles
Estructuras de datos Fundamentos de análisis y diseño de algoritmos.
INSTITUTO TECNOLOGICO DE APIZACO
Algoritmos y Estructuras de datos Listas Doblemente enlazadas
Ayudantia 3: Pilas- Colas
 Introducción  Conceptos El equipo demostrara y mostrara los conceptos, definición y funcionamiento de una las “listas doblemente enlazadas y circulares”
Lic. En C.C. Ann Margareth Meza Rodríguez
Árboles Binarios de Búsqueda (ABB)
Lic. En C.C. Ann Margareth Meza Rodríguez
Estructura de Datos..
Pilas y Colas Cursos Propedéuticos 2006 Programación y Estructuras de Datos Manuel Montes Claudia Feregrino
PROGRAMACION DE Pilas o Stacks
Estructura de Datos PILAS. es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés Last In.
M.C. Meliza Contreras González
PILAS Una pila es una estructura de datos o lista de elementos, a la cual se le puede insertar o eliminar su contenido sólo por uno de sus extremos, llamado.
Laboratorio de programación
Pilas Grupo 4. 1 Stack o Pila Definición: Una pila es una estructura de datos, a la cual se le puede ingresar o sacar elementos por un sólo lado. También.
PROGRAMACION DE Pilas o Stacks y Colas
PUNTEROS. Los punteros son de amplia utilización en programación y muchos lenguajes permiten la manipulación directa o indirecta de los mismos. Su razón.
UNIDAD 8 Lista Enlazada: Eliminar Deseamos eliminar un elemento llamado elem de la lista enlazada. Es posible que la variable ini sea modificada. main(){
1 ListaUna Lista se define como una serie de N elementos E 1, E 2,..., E N, ordenados de manera consecutiva, es decir, el elemento E k (que se denomina.
UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada TIPOS ABSTRACTOS DE DATOS TAD Tema: TIPOS ABSTRACTOS DE DATOS TAD Subtema: LISTAS.
Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I.
Listas Dinámicas.
Transcripción de la presentación:

Listas Dinámicas

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

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)

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)

¿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".

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.

Listas sig

Creación de una lista Lista vacía

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

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

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

Caso 2.1 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

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

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

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

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

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

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

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; }

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 }

Filas Dinámicas

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… sig dato …

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

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.

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

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;} } sig incio dato null

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 sig incio dato

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

Pilas Dinámicas

Características Operaciones 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)

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

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 } sig incio dato null nuevo

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; sig incio dato

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

Lista doblemente enlazada

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 } ant sig

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. Inicio fin sig ant

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

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. Nuevo nodo 1 … 3 2 null Dato

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. Dato null 2 3 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. Dato null 2 3 1 4

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.

Caso 2 Caso 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.

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

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.

Lista Circular

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

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

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.

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.

Eliminar un elemento de la lista Caso general Copiamos el contenido del nodo = siguiente sobre el contenido de nodo. Hacemos que nodo = siguiente apunte a nodo = siguiente = siguiente. Eliminamos nodo = siguiente. Si lista es el nodo = siguiente, hacemos lista = nodo.