Tratamiento de listas en Java

Slides:



Advertisements
Presentaciones similares
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Advertisements

ESTRUCTURA DE DATOS Unidad 01 Conceptos Previos.
2. Manejo de memoria Manejo de memoria estática
Métodos y parámetros.
Curso de java básico (scjp)
Estructura de Datos Unidad 4. Recursividad Dra. María Lucía Barrón Estrada Enero-Junio 2007.
Introducción a la programación en JAVA
Tablas. Descripción general Introducción a las tablas Creación de tablas Uso de tablas.
22/11/2005 E.T.S de Ingenieros de Telecomunicación - UPNA.1 Clases y Objetos Silvia Larrayoz Leire Urriza.
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
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.
Programación II Listas
Utilización de un TAD Arbol.
Archivos Implementar un método que lea una secuencia de números enteros de un archivo y compute la cantidad de elementos leídos.
El proceso de desarrollo de software
Lección 1 Introducción a la POO
Tema 5 Grafos. Implementación (I)..
Árboles binarios. Algoritmos básicos
Tema 1. Introducción a la programación (Lenguaje java).
2.3 Cola de números enteros.
2.2 Pila de números enteros
1.2 Sintaxis del lenguaje Java.
Tema 4 Árboles. Árbol sobre matriz.
1.3 Programación modular. Subprogramas.
Implementación de listas
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Implementación de Listas
Programación Orientada a Objetos en Java
Marzo 2007 Lenguajes Visuales Clase III.
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
HERENCIA.
Método en Java.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Introducción a la Programación Orientada a Objetos Redefinición y Sobrecarga Dada la siguiente jerarquía de clases: Alfa Delta Beta.
Realizado por: Bertha Palomeque A. Rodrigo Barzola J. Sensor de Temperatura utilizando el Starter Kit Javelin Stamp.
Métodos Algoritmos y Desarrollo de Programas I. Cuando utilizar métodos  Los métodos se utilizan para romper un problema en pedazos de forma que este.
Modificadores.
Herencia y Polimorfismo en JAVA
Lic. Rosemary Torrico Bascopé
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.
Slide 7-1 Copyright © 2003 Pearson Education, Inc. Figure: Estructuras de datos.
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Creación de Aplicaciones
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Tema 6: Clases Antonio J. Sierra.
Unidad I Java y C++ : Similitudes y diferencias
Public class MiClase { public static int tmp = 123; // miembro variable public static final double PI = ;// miembro constante public float.
USA agenda e itemAgenda
Clase Teórica No. 4 Programación IV
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
ÁRBOLES BINARIOS DE BÚSQUEDA
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA TRES ASIGNACION.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
ESTRUCTURA DE DATOS EN JAVA
Patrones Creacionales
Arboles M.C. José Andrés Vázquez FCC/BUAP
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
Grafos..
Informatica II1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase que ha sido extendida. La clase original se conoce como superclase.
Capítulo 2 “Subprogramas/Funciones - Arreglos”
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.
Listas Dinámicas.
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..
Transcripción de la presentación:

Tratamiento de listas en Java

Listas. Modelo.

Modelo. Memoria estática Memoria dinámica 10 12 21 13 Lista NodoLista u l 21 Memoria estática Memoria dinámica Lista nombre inicio NodoLista

Aspectos sintácticos: clase Lista. La clase Lista identifica una referencia (puntero) a un objeto (o null). La declaración de la clase Lista debe incluir: Las variables miembro. El/los constructor/es. [Opcional] Otros métodos que vayan a ser utilizados por objetos externos. Ejemplo: public class Lista { NodoLista inicio; String nombre; public ListaEnlazada () { inicio = null; nombre = null; } // Otros métodos

Aspectos sintácticos: clase NodoLista La estructura de datos que representa los nodos de una lista debe contemplarse como una clase (NodoLista.java). Se debe declarar: Las variables miembro (clave y sig). El/los constructor/es. El destructor [innecesario en Java]. [Opcional] Otros métodos que vayan a ser utilizados por objetos externos. Código: class NodoLista { int clave; NodoLista sig; NodoLista (int dato) { clave = dato; sig = null; } // otros métodos

Algoritmos básicos con listas

Algoritmos básicos. Una sola ejecución: Insertar al principio. Eliminar el primero. Recorrido de la lista (recursivo): Sin modificar la estructura: Recorrido completo: Mostrar el contenido de una lista. Modificando la estructura: Recorrido completo: Insertar al final. Obtener el duplicado de una lista. Destruir una lista.

Proceso único. Insertar al principio. 10 13 aux null 21 dato Lista nombre inicio NodoLista lista Insertar al principio. Crear nuevo nodo con la información de entrada Enlazar el nuevo nodo a la lista static void insertarAlPrincipio (Lista lista, int dato) { //¡ATENCION! No se verifica la introducción de claves repetidas. NodoLista aux; aux = new NodoLista (dato); aux.sig = lista.inicio; lista.inicio = aux; }

Inserción al principio. Modelo simplificado. Situación inicial. Creación de un nuevo nodo. Situación final.

Modelo de funcionamiento desde el programa principal public static void main (String [ ] args) { Lista lista; //Declaración de la variable (puntero) lista de clase Lista Lista = new Lista (); // Construcción de un objeto de clase Lista insertarAlPrincipio (lista,10); //Ejecución del método insertarAlPrincipio } Memoria estática Memoria dinámica Variable lista null Memoria estática Memoria dinámica Variable lista nombre inicio Objeto de clase Lista Memoria estática Memoria dinámica Variable lista nombre inicio Objeto de clase Lista null 10 Objeto de clase NodoLista

Proceso único. Eliminar el primero. ¿Y si la lista tiene un solo nodo? 10 13 null 21 Lista nombre inicio NodoLista lista static void eliminarPrimero (Lista lista) { if (lista.inicio != null) lista.inicio = lista.inicio.sig; else System.out.println ("Error, lista vacia"); }

Recorrido completo de la lista. Ejemplo: Mostrar el contenido. public void mostrarLista () { mostrarLista (inicio); } static void mostrarLista (NodoLista nodoLista) { if (nodoLista != null) { System.out.println (nodoLista.clave + " "); mostrarLista (nodoLista.sig); else System.out.println ("FIN");

nodoLista.sig = insertar (nodoLista.sig, dato); Modificación de la estructura. Recorrido completo Insertar al final. Algoritmo. Módulo de llamada no recursivo (Lista). Módulo recursivo (NodoLista). Devuelve un objeto de la clase NodoLista. Se inicializa el valor devuelto con el propio argumento:; Se “reemplaza” el puntero nodoLista.sig por el valor devuelto: ); En la fase de transición se genera el nuevo nodo. El método solo surte efecto en la instancia de la fase de vuelta correspondiente al último nodo original. Se recuerda que en Java los argumentos solo pueden pasarse “por valor”. resul = nodoLista; nodoLista.sig = insertar (nodoLista.sig, dato);

Modificación de la estructura. Recorrido completo. Insertar al final. Código static void insertarAlFinal (Lista l, int dato) { //¡ATENCION! No se verifica la introduccion de claves repetidas. l.inicio = insertarAlFinal (l.inicio,dato); } static NodoLista insertarAlFinal (NodoLista nodoLista, int dato) { NodoLista resul = nodoLista; if (nodoLista != null) nodoLista.sig = insertarAlFinal (nodoLista.sig, dato); else { resul = new NodoLista (dato); //resul.sig = nodoLista; (Innecesario, ya es null) return resul;

Modificación de la estructura. Recorrido completo . Insertar al final. Modelo físico. nombre inicio 2 Instancia 1 Instancia 2 Instancia 3 nodoLista resul 8 dato lanzadera lista null 4 nodoLista.sig = insertarAlFinal (nodoLista.sig, 8);

Modificación de la estructura. Recorrido completo. Insertar al final. Modelo simplificado Situación inicial. Fase de transición. Fase de vuelta. null 4 2 Lista nombre inicio NodoLista null 4 2 8 resul Lista nombre inicio NodoLista Instancia 3 null 4 2 8 Instancia 1 Instancia 2 Lista nombre inicio NodoLista

Recorrido completo. Obtener el duplicado de una lista. Combinación de algoritmos básicos: Recorrido completo sin modificar estructura (lista origen). Insertar (lista destino). Alternativas: En la fase de ida: insertarAlFinal. En la fase de vuelta: insertarAlPrincipio. static void duplicarLista (Lista listaO, Lista listaD) { listaD.inicio = duplicarLista (listaO.inicio); } static NodoLista duplicarLista (NodoLista nodoListaO) { NodoLista resul; NodoLista aux; if (nodoListaO != null) { resul = duplicarLista (nodoListaO.sig); aux = new NodoLista (nodoListaO.clave); aux.sig = resul; resul = aux; else resul = null; return resul;

Recorrido completo. Obtener el duplicado de una lista. Combinación de algoritmos básicos: (lista origen) Recorrido completo sin modificar estructura (lista destino) Insertar un nodo al principio de la lista en la fase de vuelta static void duplicarLista (Lista listaO, Lista listaD) { listaD.inicio = duplicarLista (listaO.inicio); } static NodoLista duplicarLista (NodoLista nodoListaO) { NodoLista resul; NodoLista aux; if (nodoListaO != null) { resul = duplicarLista (nodoListaO.sig); aux = new NodoLista (nodoListaO.clave); aux.sig = resul; resul = aux; else resul = null; return resul;