Programación II Listas

Slides:



Advertisements
Presentaciones similares
5. Estructuras no lineales estáticas y dinámicas
Advertisements

Curso de java básico (scjp)
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.
Lenguaje de programación Java
Programación II Recursividad
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.
Estructuras de datos y algoritmos
Igor Santos Grueiro. Muchos objetos tienen CLAVE.
POO en C++: Sintaxis En el .h debe aparecer la declaración de la clase: class NombreClase { private: // atributos y métodos privados public: // atributos.
Tema 5 Grafos. Implementación (I)..
Árboles binarios. Algoritmos básicos
Tema 1. Introducción a la programación (Lenguaje java).
Tratamiento de listas en Java
Tema 4 Árboles. Árbol sobre matriz.
Implementación de listas
PROGRAMACION DE Pilas o Stacks y Colas
Algoritmos Aleatorizados
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Implementación de Listas
Marzo 2007 Lenguajes Visuales Clase III.
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
El concepto de clase Con frecuencia un término puede definirse de diferentes maneras según el enfoque. Desde el punto de vista del análisis y el diseño.
Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Definición Estructura de datos jerárquica (no lineal) que puede representarse como un conjunto de nodos enlazados entre sí por medio de ramas. Formalmente,
L ISTAS E NLAZADAS No son mas que un conjunto o lista de objetos que a diferencia de los vectores, estas poseen la capacidad de crecer o decrecer. Por.
Estructuras dinámicas de datos, TAD Lista, parte 2
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Tema 6: Clases Antonio J. Sierra.
Técnicas avanzadas de programación Interfaces
Igor Santos Grueiro. Ahora tenemos datos y datos …
ÁRBOLES BINARIOS DE BÚSQUEDA
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
Curso Programación en Java
ESTRUCTURAS DE DATOS I Conocer, comprender y analizar algunos de los principales tipos de estructuras de datos.
7.  El TDA Diccionario.
ESTRUCTURA DE DATOS EN JAVA
Clase 10: Estructuras de datos y arreglos.
Arboles M.C. José Andrés Vázquez FCC/BUAP
ARBOLES ESTRUCTURAS DE DATOS.
Pilas y Colas Estructuras de Datos.
Árboles Binarios Estructuras de Datos.
LISTA DOBLEMENTE ENLAZADA
Dinamismo y Contenedores Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires (C++ Avanzado) Depto. de Computación Algoritmos y Estructuras.
Universitarios: Ricardo Gonzales Jimenez Wilfredo Coca Reinaldo Yohan Docente: Lic. Israel Torrez Valverde Tema: Listas doblemente Enlazadas.
Igor Santos Grueiro. Cuando no sabemos cuánto vamos almacenar.
Unidad 4: LISTAS.
Presentado por: PABLO ANDRES DIAZ SAIN HASSAM CAICEDO
Estructuras de datos Fundamentos de análisis y diseño de algoritmos.
INSTITUTO TECNOLOGICO DE APIZACO
Algoritmos y Estructuras de datos Listas Doblemente enlazadas
Listas. Utilización de un TAD Lista. Interfaz del TAD LISTA public interface Lista { void crearNodo (); /*Crea un nuevo nodo en el TadLista*/ int devolverClave.
PROGRAMACION DE Pilas o Stacks
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
M.C. Meliza Contreras González
Laboratorio de programación
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
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.
Listas Dinámicas.
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.
Factorías e Iterables Introducción del concepto de patrón de diseño Construcción de tipos para recorridos con for extendido Fundamentos de Programación.
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.
Transcripción de la presentación:

Programación II Listas Igor Santos Grueiro

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) !=

Pueden haber elementos repetidos (1,2,2,2,2,2,2,3)

Ya sabemos utilizar la lista enlazada

Pero, ¿cómo se 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

permite el acceso directo a un elemento Tiene una única ventaja: permite el acceso directo a un elemento

Tiene múltiples desventajas

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

ArrayList en java

Para una lista dinámica, de nuevo Nodo Nodo siguiente Object elemento

Tiene los siguientes atributos } Tiene los siguientes atributos public class NodoListaEnlazadaSimple { private Object elemento; private NodoListaEnlazadaSimple siguiente; }

} Un nodo se puede crear de varias formas

1 Se puede crear vacío public NodoListaEnlazadaSimple(){ this.elemento = null; this.siguiente = null; }

null

Se puede crear con un objeto dentro 2 Se puede crear con un objeto dentro public NodoListaEnlazadaSimple(Object x) { this.elemento = x; this.siguiente = null; }

x

Se puede crear con un objeto dentro y un enlace a otro nodo 3 Se puede crear con un objeto dentro y un enlace a otro nodo public NodoListaEnlazadaSimple(Object x, NodoListaEnlazadaSimple sig) { this.elemento = x; this.siguiente = sig; }

X Nodo siguiente

para el valor del objeto } Getters y Setters para el valor del objeto y para el nodo siguiente

insertar un nodo siguiente } Podemos insertar un nodo siguiente al nodo public void insertarSig(Object x){ NodoListaEnlazadaSimple nuevoNodo = new NodoListaEnlazadaSimple(); nuevoNodo.elemento = x; nuevoNodo.siguiente = this.siguiente; this.siguiente = nuevoNodo; }

siguiente elemento X

Podemos borrar el siguiente nodo } Podemos borrar el siguiente nodo public void borrarSig(){ this.siguiente = this.siguiente.siguiente; }

Ahora la clase ListaEnlazadaSimple

public class ListaEnlazadaSimple { } public class ListaEnlazadaSimple { private NodoListaEnlazadaSimple primero; private NodoListaEnlazadaSimple recorrido; private int tamanyo; public ListaEnlazadaSimple(){ this.primero = null; this.recorrido = null; this.tamanyo = 0; }

Para vaciar el primer nodo y el recorrido a null //… public void vaciar(){ this.primero = null; this.recorrido = null; this.tamanyo = 0; }

Para comprobar si una lista está vacía comprobamos si el primero es null //… public boolean estaVacia (){ return (this.primero == null); }

También, podemos recuperar public Object cima(){ return v[cont-1]; } También, podemos recuperar el número de elementos insertados en la lista //… public int tamanyo(){ return tamanyo; }

Podemos insertar un objeto en la primera posición de la lista public Object cima(){ return v[cont-1]; } Podemos insertar un objeto en la primera posición de la lista //… public void insertarPrimero(Object x) { primero = new NodoListaEnlazadaSimple(x, primero); this.tamanyo++; }

Primero Cima x

Necesitaremos acceder al nodo en cierta posición de la lista public Object cima(){ return v[cont-1]; } Necesitaremos acceder al nodo en cierta posición de la lista //… private NodoListaEnlazadaSimple devuelvePos(int pos) { NodoListaEnlazadaSimple temp = primero; for (int i = 1; i <= pos; i++) { temp = temp.getSiguiente(); } return temp; }//…

Para insertar un objeto en cierta posición de la lista public Object cima(){ return v[cont-1]; } Para insertar un objeto en cierta posición de la lista //… public void insertarPos(Object x, int pos) { if (pos == 0) primero = new NodoListaEnlazadaSimple(x, primero); else devuelvePos(pos - 1).insertarSig(x); tamanyo++; }

Primero Cima Pos 1 siguiente elemento X

Para modificar un objeto en cierta posición de la lista public Object cima(){ return v[cont-1]; } Para modificar un objeto en cierta posición de la lista //… public void modificarPos(Object x, int pos) { NodoListaEnlazadaSimple temp = devuelvePos(pos); temp.setElemento(x); }

Para borrar un objeto en cierta posición de la lista public Object cima(){ return v[cont-1]; } Para borrar un objeto en cierta posición de la lista //… public void borrarPos(int pos) { if (pos == 0) primero = primero.getSiguiente(); else { NodoListaEnlazadaSimple temp = devuelvePos(pos - 1); temp.borrarSig(); } tamanyo--; }//…

Primero Cima Pos 1

Para borrar un objeto específico de la lista public Object cima(){ return v[cont-1]; } Para borrar un objeto específico de la lista //… public void borrar(Object x) { NodoListaEnlazadaSimple ant = null; NodoListaEnlazadaSimple temp = 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--; }//…

Podemos devolver un elemento en cierta posición public Object cima(){ return v[cont-1]; } Podemos devolver un elemento en cierta posición //… public Object extraerPos(int pos) { return devuelvePos(pos).getElemento(); }//…

Para buscar un objeto específico de la lista public Object cima(){ return v[cont-1]; } Para buscar un objeto específico de la lista //… public int buscar(Object x) { int i = 0; NodoListaEnlazadaSimple temp = primero; while ((i < tamanyo) && (!temp.getElemento().equals(x))) { temp = temp.getSiguiente(); i++; } if (i >= tamanyo) return -1; else return i;

Las operaciones de recorrido

Podemos iniciar un recorrido public Object cima(){ return v[cont-1]; } Podemos iniciar un recorrido por la lista //… public void inicioRecorrido() { recorrido = primero; }//…

Podemos seguir avanzando por la lista public Object cima(){ return v[cont-1]; } Podemos seguir avanzando por la lista //… public Object getElemento() { Object x = recorrido.getElemento(); recorrido = recorrido.getSiguiente(); return x; }//…

Podemos saber si hemos acabado el recorrido public Object cima(){ return v[cont-1]; } Podemos saber si hemos acabado el recorrido //… public boolean finRecorrido() { return (recorrido == null); }

Ésta es la lista simplemente enlazada

Cada nodo tiene 1 enlace

Pero hay más listas …

Optimizan la inserción por el medio de la lista Cada nodo tiene 2 enlaces Optimizan la inserción por el medio de la lista Listas doblemente enlazadas

Lista con inserción por el final Podemos mejorar la inserción al final añadiendo una referencia al nodo final Primero Último Lista con inserción por el final

Pueden ser simplemente o doblemente enlazadas Y aún hay más Pueden ser simplemente o doblemente enlazadas Listas circulares

: Realizar listas: Simplemente enlazada Ejercicio Realizar listas: Simplemente enlazada Simplemente enlazada con inserción al final :