UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada TIPOS ABSTRACTOS DE DATOS TAD Tema: TIPOS ABSTRACTOS DE DATOS TAD Subtema: LISTAS.

Slides:



Advertisements
Presentaciones similares
Introducción a C++ Sistemas Operativos
Advertisements

IBD Clase 7.
Lenguaje de programación Java
Ejemplo de Programa C++
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
Estructuras de datos y algoritmos
Tipos de Datos Básicos y Estructurados
Las estructuras de arreglos fueron usadas en las primeras computadoras digitales, cuando la programación se hacía todavía en lenguaje máquina, para tablas.
Punteros Universidad Nacional Mayor de San Marcos
9A9A9A9A Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática.
INFORMATICA I Funciones CLASE 13.
Tema 1. Introducción a la programación (Lenguaje java).
Tratamiento de listas en Java
PROGRAMACION DE Pilas o Stacks y Colas
Algoritmos Aleatorizados
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Arreglos Ing. Nahiby Castillo.
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.
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
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
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
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.
Á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.
Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación I.
Estructura de Datos y Algoritmos
ESTRUCTURA DE DATOS EN JAVA
Estructuras de Datos Arreglos.
Clase 10: Estructuras de datos y arreglos.
Estructuras de Datos Dinámicas: Listas Programación I Departamento de Informática Universidad Nacional de San Luis Argentina 2014.
Informática Ingeniería en Electrónica y Automática Industrial
Aplicación de estructuras de datos
Pilas y Colas Estructuras de Datos.
Árboles Binarios Estructuras de Datos.
Dinamismo y Contenedores Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires (C++ Avanzado) Depto. de Computación Algoritmos y Estructuras.
Laboratorio Análisis y Diseño de Algoritmos 2 Biblioteca estándar de templates de C++ Standard Template Library (STL)‏ Motivación Ejemplo: Lista + Iterador.
Programación en C para electrónicos
Listas Ligadas Simples. Definíción I  Es, en sencillas palabras. un grupo de datos organizados secuencialmente, pero a diferencia de los arreglos, la.
Un arreglo es un grupo de variables, llamadas elementos, que contienen valores del mismo tipo. Una representación lógica de un arreglo se muestra de la.
APUNTADORES.
Punteros Recomendado: 1. Nivelación Funciones
Presentado por: PABLO ANDRES DIAZ SAIN HASSAM CAICEDO
Punteros, referencias Listas enlazadas Arboles
INSTITUTO TECNOLOGICO DE APIZACO
Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación I.
PROGRAMACION DE Pilas o Stacks
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.
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
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.
Clase II Estructuras dinámicas (TAD) Listas Enlazadas. ¿A que llamamos estructuras dinámicas? ¿Por qué son necesarias? Ventajas y Desventajas que tendremos.
PROF. RAFAEL MONTENEGRO B. UNELLEZ-APURE Introducci Ó n a los Arreglos (“arrays”) en C++
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ Facultad de Ingeniería de Sistemas Computacionales Programa de Lic. en Informática Educativa Computación.
UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada HERENCIA Tema: HERENCIA Ing. Javier Chamorro Cerón.
UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada TIPOS ABSTRACTOS DE DATOS TAD Tema: TIPOS ABSTRACTOS DE DATOS TAD Subtema: COLAS.
Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
LISTAS..
Transcripción de la presentación:

UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada TIPOS ABSTRACTOS DE DATOS TAD Tema: TIPOS ABSTRACTOS DE DATOS TAD Subtema: LISTAS Ing. Javier Chamorro Cerón

Arrays int[5]; 62417

Un NODO es una estructura que contiene un dato y un puntero que apunta hacia una dirección de memoria donde se encuentra otro nodo. Gráficamente sería: NODO Valor Siguiente Advertencia: Siguiente es un PUNTERO que apunta a un nuevo nodo, por esa razón, la clase NODO tiene como atributo un Puntero de tipo NODO. A esa estrategia de programación se la denomina RECURSIVIDAD O RECURSIÓN.

#include using namespace std; class Nodo { private: stringvalor; Nodo *sig; public: Nodo (string valor = "", Nodo *sig = NULL){ this->valor = valor; this->sig = sig;} void setValor (string valor){ this->valor = valor;} void setSig (Nodo *sig){ this->sig = sig;} string getValor ( ){ return this->valor;} Nodo *getSig ( ){ return this->sig;} };

Una lista es una estructura de datos que nos permite agrupar elementos de una manera organizada. Las listas están compuestas por nodos, estos nodos tienen un dato o valor y un puntero a otro nodo. Un nodo es una estructura que contiene un valor cualquiera y un puntero al siguiente nodo en la lista. LISTAS ENLAZADAS SIMPLES: por ser el punto de partida y fundamentales para poder entender las otras. Una lista enlazada tiene un conjunto de nodos. El último nodo de la lista tiene como siguiente nodo el valor NULL. Entonces las listas enlazadas simples solo pueden ser recorridas en una dirección, apuntando al nodo siguiente, mas no a un nodo anterior.

Gráficamente sería: null Ejemplo de una lista enlazada simple: En lenguaje normal: 55-> 60-> 31-> 5-> 4-> 51-> 9-> 27-> 68-> 62-> NULL En realidad: Nodo-> Dato: 55 Direcion: 0x3d2c00 Siguiente: 0x3d2c80 Nodo-> Dato: 60 Direcion: 0x3d2c80 Siguiente: 0x3d2c90 Nodo-> Dato: 31 Direcion: 0x3d2c90 Siguiente: 0x3d2ca0 Nodo-> Dato: 5 Direcion: 0x3d2ca0 Siguiente: 0x3d2cb0 Nodo-> Dato: 4 Direcion: 0x3d2cb0 Siguiente: 0x3d2cc0 Nodo-> Dato: 51 Direcion: 0x3d2cc0 Siguiente: 0x3d3ab8 Nodo-> Dato: 9 Direcion: 0x3d3ab8 Siguiente: 0x3d3ac8 Nodo-> Dato: 27 Direcion: 0x3d3ac8 Siguiente: 0x3d3ad8 Nodo-> Dato: 68 Direcion: 0x3d3ad8 Siguiente: 0x3d3ae8 Nodo-> Dato: 62 Direcion: 0x3d3ae8 Siguiente: NULL

Obviamente, internamente no existen las palabras nodo, dato, dirección y siguiente, es solo una representación. Como una lista es una estructura de datos dinámica, el tamaño de la misma puede cambiar durante la ejecución del programa. Se puede generar memoria dinámicamente para un array, pero un array es una estructura estática pues su tamaño tiene un limite y así creáramos array dinámicos hay que redimensionar el tamaño si es necesario, lo cual ya implica un costo de volver a generar memoria dinámica. Entonces podemos ver una ventaja de la listas sobre los arrays: No tener que redimensionar la estructura y poder agregar elemento tras elemento indefinidamente. En un vector VEC se puede referenciar una posición de la forma VEC [50] cuando se necesitaba tomar el índice 50 del vector VEC. A esto se le conoce como acceso aleatorio. En el caso de las listas el acceso es secuencial, es decir, para acceder a un elemento del conjunto debemos de recorrer uno por uno los elementos hasta llegar al solicitado. Rápidamente se puede concluir que el tiempo de acceso a los elementos de un array es muchísimo más rápido que en una lista. Esta es una gran desventaja de las listas, por lo que buscar elementos por índice sería muy costoso. Esto no quiere decir que trabajar con arrays sea mejor que con listas. Las listas son muy flexibles y para muchos casos son imprescindibles.

Retomando: null Construcción de la clase lista: recuerde que la lista está conformada por nodos, por ésta razón se deberá tener objetos del tipo nodo para poder operarla:

class Lista { private: Nodo *cabeza; public: Lista ( ){ this->cabeza = NULL;} void setCabeza (Nodo *nodo){ this->cabeza = nodo;} Nodo *getCabeza ( ){ return this->cabeza;} Nodo *getUltimo ( ){ Nodo *aux; aux = this->cabeza; if (aux){ while (aux->getSig ( )!=NULL){ aux = aux->getSig( );} } return aux; };

Nodo *Buscar (string valor){ Nodo *aux; aux = this->cabeza; while (aux){ if (aux->getValor( ) == valor) return (aux); aux = aux->getSig ( ); } return NULL; } void Insertar (string valor){ Nodo *newNodo, *aux; newNodo = new Nodo (valor); aux = this->getUltimo(); if (aux) aux->setSig(newNodo); else this->setCabeza(newNodo); return; }