Programación de sistemas

Documentos relacionados
Programación de sistemas Listas enlazadas

Listas enlazadas. Programación de Sistemas

Programación de sistemas Pilas y Colas

Programación de sistemas

Estructuras de Datos y Algoritmos TDA LISTA

Ingeniera de Sistemas: Luz Esperanza Espitia Tutora de Estructura de datos.

Tema 8. Listas. José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz

Clase adicional 9. Listas enlazadas. Temas. Listas enlazadas Árboles Problemas de la clase adicional Ejercicios de diseño

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

Unidad Nº V Listas Enlazadas

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

Taller de Programación I. Tema 08: Estructuras Dinámicas de Datos en Java

Estructuras de datos en memoria principal

El método main de la clase PruebaArbol, empieza creando una instancia de un objeto Árbol vacío y asigna su referencia a la variable árbol

Estructura de Datos. Árboles Binarios de Búsqueda ABB. Primer Semestre, 2010

LISTAS ENLAZADAS FUNDAMENTOS TEORICOS

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++

Tema 10: Árbol binario de búsqueda

Estructuras de Datos y Algoritmos Tema 3: Arrays y listas enlazadas

LISTAS. Prof. Ing. M.Sc. Fulbia Torres

1.2.4 Listas enlazadas

Este material es de uso exclusivo para estudio, los textos fueron tomados textualmente de varios libros por lo que está prohibida su impresión y

Segundo parcial de Programación 2

Patrones de Diseño. Patrón de comportamiento Iterator. Técnicas de Programación - Curso 2007/08

INTERFACE LIST DEL API JAVA. CLASES ARRAYLIST, LINKEDLIST, STACK, VECTOR. EJEMPLO CON ARRAYLIST. (CU00920C)

Punteros y Memoria Dinámica II

PILAS Fundamentos

Estructura de datos y Programación

Programación orientada a objetos I

Estructura de datos y de la información Boletín de problemas - Tema 10

Tema 7- Modelo y Aplicación de Pila, Cola y. Tema 7- Modelo y Aplicación de. Lista Con Punto de Interés

Estructura de Datos. Listas Enlazadas

Estructuras de Datos Clase 6 Listas e Iteradores (primera parte)

UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Bloque II. Elementos del lenguaje de programación Java

Clases e instancias. Algoritmos y Estructuras de Datos I. Clases e instancias. memoria dinámica.

Estructuras Enlazadas AyED UTN-BA

Estructuras Dinámicas de datos.

CAPÍTULO 3 ESTRUCTURAS DE DATOS ESTÁTICAS

EDA. Tema 8 Colas de Prioridad: Heaps

ÍNDICE 1. Índice Listas ordenadas Operaciones permitidas Pilas Operaciones permitidas...

Estructuras de datos: Árboles binarios de

Implementación de las Clases Pila, Cola, Lista y Arbol

Tipos Recursivos de Datos

Estructuras de Datos II

Examen Junio- Grupo B Lunes 17 de Junio - Programación en C++ Pág. 1

TEMA 3. Árboles. Objetivos. Contenidos. Bibliografía. Básica

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Tema 6. Gestión dinámica de memoria

PROGRAMACIÓN EN JAVA

Capitulo V Listas Enlazadas

Lenguajes de Programación Curso Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces Clases abstractas 2

Hoja de ejercicios del Tema 9

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

Estructuras de datos. Colecciones en C#. Arreglos, Listas, Pilas, Colas y Árboles Métodos de búsqueda y ordenamiento

6. El TDA Lista Implementación con listas enlazadas. es de tipo genérico T. Pueden existir elementos repetidos (a diferencia de los conjuntos).

Asignación de Memoria (Allocation) Algoritmos y Estructuras de Datos I. Asignación de Dinámica de Memoria

PROGRAMACIÓN GENÉRICA

class identificador{ //Bloque de propiedades (datos miembro, atributos, propiedades) //Bloque de métodos (comportamientos) }

Tema 4 Colecciones en Java. Programación Orientada a Objetos Curso 2013/2014

Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 3: ESTRUCTURAS DINÁMICAS LINEALES. LISTAS ENLAZADAS, PILAS Y COLAS

CAPÍTULO 6 COMPOSICIÓN Y AGREGACIÓN

Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++

Tema 8- Implementación de Pila, Cola y. Tema 8- Implementación de Pila, Cola y Lista con Punto de Interés. Representación Eficaz de una EDA

Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Árboles binarios. Franco Guidi Polanco Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile

Soluciones. boolean pruebaiteraseriegeometrica () { Serie s= new SerieGeometrica (1, 2); return (s.iterator() instanceof IteraSerieGeometrica); }

Clases y Objetos en C++

Guía del Curso IFCD052PO PROGRAMACIÓN EN JAVA

Tema 5. Estructura de datos Pila

ÁRBOLES PARCIALMENTE ORDENADOS

Árboles. Árboles. Árboles binarios de búsqueda. Árboles. Inserción en un árbol. Árbol binario de búsqueda

Estructura de datos Colas

Tema: Tipos Abstractos de Datos (TAD s) en C#.

Tema 7.- Fundamentos de la Programación Orientada a Objetos

4. Pilas ESTRUCTURAS DE DATOS 1

La sintaxis básica para definir una clase es la que a continuación se muestra:

Examen Teórico Convocatoria de Junio de 2012

ÁRBOL BINARIO. T der. Árbol binario homogéneo es aquel cuyos nodos tienen grado 0 ó 2(no hay ninguno de grado 1).

Conceptos Básicos. Programación Orientada a Objetos 2

ÁRBOLES BINARIOS DE BÚSQUEDA (ABB)

Solución práctico 6 Tipos Abstractos de Datos Lista, Pila y Cola

ESTRUCTURAS DINÁMICAS DE DATOS (LISTAS)

Transcripción:

Programación de sistemas Listas enlazadas Julio Villena Román <jvillena@it.uc3m.es> MATERIALES BASADOS EN EL TRABAJO DE DIFERENTES AUTORES: Carlos Delgado Kloos, Jesús Arias Fisteus, Carlos Alario Hoyos 1

Contenidos Estructuras de datos Listas enlazadas La clase Node La clase LinkedList Ventajas y desventajas de las listas enlazadas 2

Estructuras de datos Abstracción que representa un conjunto de datos en un programa con el objetivo de facilitar su manipulación Diferentes estructuras de datos presentan ventajas o desventajas dependiendo de la naturaleza de los datos y los tipos de manipulaciones que se necesite hacer sobre los mismos 3

Estructuras de datos lineales Organizan los datos en secuencia, donde cada dato se relaciona con un dato anterior (excepto el primero) y un dato posterior (excepto el último) Ejemplos de estructuras de datos lineales: Arrays Listas enlazadas Pilas Colas Colas dobles 4

Arrays Ventajas para el almacenamiento de colecciones lineales de datos: Acceso aleatorio: se puede acceder a cualquier posición del array en tiempo constante. Uso eficiente de memoria cuando todas las posiciones están ocupadas: por guardarse en posiciones consecutivas de memoria. 5

Arrays Desventajas Tamaño estático: debe asignarse un tamaño al crear el array, y no se puede cambiar. Da lugar a problemas: o o Uso no eficiente de memoria por tener que reservar espacio para el caso peor Posibilidad de sobrepasar el tamaño reservado en tiempo de ejecución Necesidad de memoria contigua: o Puede ocurrir que, pese a haber suficiente memoria libre, no haya un bloque contiguo suficientemente grande 6

Arrays Desventajas Ciertas operaciones tienen un coste no óptimo: o o o Inserciones y eliminaciones de datos en la primera posición o posiciones intermedias: necesidad de desplazar datos entre posiciones consecutivas. Concatenación de dos o más arrays: necesidad de copiar los datos a un nuevo array. Partición de un array en varios fragmentos: necesidad de copiar datos a nuevos arrays. 7

Ejercicio 1 Crea un array de diez elementos de tipo entero e inicialízalos todos con el valor 0. Después inserta un elemento adicional con valor 1 en la cuarta posición del array 8

Listas enlazadas Secuencia ordenada de nodos donde cada nodo almacena: Un dato (información) Una referencia al siguiente nodo Los nodos no tienen por qué estar contiguos en memoria first next next next 9

La clase Node public class Node<E> { private E info; private Node<E> next; Uso de genéricos para almacenar información de diferentes tipos Dos atributos: dato y referencia al siguiente nodo public Node(E info) { } Constructor para inicializar el dato public Node<E> getnext() { } public void setnext(node<e> next) { } public E getinfo() { } public void setinfo(e info) { } } Métodos get y set de los atributos 10

La clase Node (sin genéricos) public class Node { private Object info; private Node next; } public Node(Object info) { } public Node getnext() { } public void setnext(node next) { } public Object getinfo() { } public void setinfo(object info) { } 11

Ejercicio 2 Completa el código de la clase Node. Incluye tres constructores: uno que no recibe información para inicializar ningún atributo; otro que permite inicializar el atributo info, y otro que permite inicializar los dos atributos 12

La clase MyLinkedList public class MyLinkedList<E> { private Node<E> first; public MyLinkedList() { } } public void insert(e info) { } public E extract() { } public void insert(e info, Node<E> previous) { } public E extract(node<e> previous) { } public void print() { } public Node<E> searchlastnode() { } public int search(e info) { } 13

Inserción al principio public void insert(e info) first newnode Paso 1: Crear un nuevo nodo Node<E> newnode = new Node<E>(info); 14

Inserción al principio public void insert(e info) first newnode Paso 2: Asignar como siguiente del nodo creado al primero de la lista newnode.setnext(first); 15

Inserción al principio public void insert(e info) first newnode Paso 3: Asignar como primero de la lista al nodo creado first = newnode; 16

Extracción del primer nodo public E extract() first Paso 1: Comprobar que la lista no está vacía if (first!= ) 17

Extracción del primer nodo public E extract() first data Paso 2: Recuperar la información del nodo a extraer E data = first.getinfo(); 18

Extracción del primer nodo public E extract() first data Paso 3: Asignar como primer nodo de la lista al segundo first = first.getnext(); 19

Extracción del primer nodo public E extract() first data El nodo queda aislado y ya no pertenece a la lista Paso 4: Devolver el dato return data; 20

Inserción en un punto intermedio public void insert(e info, Node<E> previous) first previous Paso 1: Comprobar que previous no es if (previous!= ) 21

Inserción en un punto intermedio public void insert(e info, Node<E> previous) first previous newnode Paso 2: Crear un nuevo nodo Node<E> newnode = new Node<E>(info); 22

Inserción en un punto intermedio public void insert(e info, Node<E> previous) first previous newnode Paso 3: Asignar como siguiente del nodo creado al siguiente a previous newnode.setnext(previous.getnext()); 23

Inserción en un punto intermedio public void insert(e info, Node<E> previous) first previous newnode Paso 4: Asignar el nodo creado como el siguiente a previous previous.setnext(newnode); 24

Eliminación de un dato intermedio public E extract(node<e> previous) first previous Paso 1: Comprobar que la lista no está vacía. Comprobar que previous no es. Comprobar que el siguiente a previous no es if (first!= && previous!= && previous.getnext()!= ) 25

Eliminación de un dato intermedio public E extract(node<e> previous) first previous data Paso 2: Recuperar la información del nodo a extraer E data = previous.getnext().getinfo(); 26

Eliminación de un dato intermedio public E extract(node<e> previous) first previous data Paso 3: Asignar como siguiente a previous el siguiente al nodo a extraer previous.setnext(previous.getnext().getnext()) 27

Eliminación de un dato intermedio public E extract(node<e> previous) first previous data El nodo queda aislado y ya no pertenece a la lista Paso 4: Devolver el dato return data; 28

Recorrido de la lista e impresión public void print() first current Node<E> current = first; while (current!= ) { System.out.println(current.getInfo()); current = current.getnext(); } 29

Recorrido: buscar el último nodo public Node<E> searchlastnode() Se avanza una referencia hasta localizar un nodo cuyo siguiente sea : public Node<E> searchlastnode() { Node<E> last = ; Node<E> current = first; if (current!= ) { while (current.getnext()!= ) { current = current.getnext(); } last = current; } return last; } 30

Recorrido: buscar posición de un dato public int search(e info) Se avanza una referencia hasta localizar el dato. Se va incrementando un contador al mismo tiempo: public int search(e info) { int pos = 1; Node<E> current = first; while (current!= &&!current.getinfo().equals(info)) { pos += 1; current = current.getnext(); } if (current!= ){ return pos; } else { return -1; } }

Ejercicio 3 Crea el método public int numberofocurrences(e info), que devuelva el número de nodos de una lista enlazada cuya información almacenada es la misma que la proporcionada como argumento 32

Ventajas de las listas enlazadas Inserción y extracción de nodos con coste independiente del tamaño de la lista Concatenación y partición listas con coste independiente del tamaño de las listas No hay necesidad de grandes cantidades de memoria contigua El uso de memoria se adapta dinámicamente al número de datos almacenados en la lista en cada momento 33

Desventajas de las listas enlazadas Acceso a posiciones intermedias con coste dependiente del tamaño de la lista Necesidad de memoria adicional para almacenar los objetos Node con sus atributos 34

Ejercicio 4 Crea una Lista Enlazada de diez elementos de tipo entero e inicialízalos todos con el valor 0. Después inserta un elemento adicional con valor 1 en la cuarta posición de la Lista Enlazada. Asume que ya existen la clase Node y la clase MyLinkedList tal y como se han programado anteriormente. 35