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.

Slides:



Advertisements
Presentaciones similares
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.
Advertisements

PILA.
ESTRUCTURA DE DATOS Unidad 03 PILAS.
Á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.
Programación II Listas
Estructuras de datos y algoritmos
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.
Tema 1. Introducción a la programación (Lenguaje java).
Tratamiento de listas en Java
PROGRAMACION DE Pilas o Stacks y Colas
Algoritmos Aleatorizados
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
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
Slide 7-1 Copyright © 2003 Pearson Education, Inc. Figure: Estructuras de datos.
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.
PILAS, COLAS, RECURSIVIDAD.
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
Árboles binarios de búsqueda
1 Estructuras de Datos Elementales:stacks (pilas), queues (colas), linked lists (listas enlazadas), y rooted trees (árboles con raíz) Agustín J. González.
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.
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..
Listas Ligadas Simples. Definíción I  Es, en sencillas palabras. un grupo de datos organizados secuencialmente, pero a diferencia de los arreglos, la.
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.
 Ignacio Soto Valdez R  Paola Karina Suarez Salazar R  Mario Alberto Castillo Aviles R
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”
Estructura de Datos..
Pilas y Colas Cursos Propedéuticos 2006 Programación y Estructuras de Datos Manuel Montes Claudia Feregrino
Estructura: COLA Profesor: Ing. Erick López Ch. M.R.I.
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.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
ESTRUCTURAS LINEALES “LA PILA”
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.
Estructura de Datos PILA Universidad Hispanoamericana Prof. Ing. Erick López.
Listas Dinámicas.
UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada TIPOS ABSTRACTOS DE DATOS TAD Tema: TIPOS ABSTRACTOS DE DATOS TAD Subtema: COLAS.
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:

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 elemento k-ésimo) es previo al elemento E k+1. Si la lista contiene 0 elementos se denomina como lista vacía. La forma en que la lista esta ordenada fuede basarse en ciertas condiciones, como por ejemplo ordenadas en forma ascendente. Las operaciones que se pueden realizar en la lista son: EstaVacia(): devuelve verdadero si la lista esta vacía, falso en caso contrario. Insertar(x, k): inserta el elemento x en la k-ésima posición de la lista. Buscar(x): devuelve la posición en la lista del elemento x. BuscarK(k): devuelve el k-ésimo elemento de la lista. Eliminar(x): elimina de la lista el elemento x. Una manera simple de implementar una lista es utilizando un arreglo, pero la inserción y borrado de elementos es ineficientes, ya que es necesario mover todos los elementos para hacer espacio o para ocupar un espacio desocupado. Cuando se necesitan estructuras que puedan cambiar de tamaño durante la ejecución del programa, se podrian crear arrays dinamicos; pero una vez creados, su tamaño también será fijo.

2 Una implementación más eficiente del TDA se logra utilizando listas enlazadas, donde su tamaño puede cambiar durante la ejecución del programa. NodosElementos Las Listas Enlazadas están compuestas de otras pequeñas estructuras: Nodos o Elementos, que agrupan los datos con los que se trabajaran, y además uno o más punteros autoreferenciales, es decir, punteros a objetos del mismo tipo nodo. Una estructura básica de un nodo para crear listas de datos seria: Una Lista Enlazada es una estructura vacía o un elemento de información y enlace hacia una lista (varios nodos enlazados). Información Nodo SigteNODO class NODO { //Información: //Atributos y Métodos NODO *NodoSigte; } Representación graficaImplementación en C++

3 Listas abiertas:Listas abiertas: cada elemento sólo dispone de un puntero, que apuntará al siguiente elemento de la lista o valdrá NULL si es el último elemento. Pilas:Pilas: son un tipo especial de lista, conocidas como listas LIFO (Last In, First Out: el último en entrar es el primero en salir). Los elementos se "amontonan" o apilan, de modo que sólo el elemento que está encima de la pila puede ser leído, y sólo pueden añadirse elementos encima de la pila. Colas:Colas: otro tipo de listas, conocidas como listas FIFO (First In, First Out: El primero en entrar es el primero en salir). Los elementos se almacenan en fila, pero sólo pueden añadirse por un extremo y leerse por el otro. Listas circulares:Listas circulares: o listas cerradas, son parecidas a las listas abiertas, pero el último elemento apunta al primero. De hecho, en las listas circulares no puede hablarse de "primero" ni de "último". Cualquier nodo puede ser el nodo de entrada y salida. Listas doblemente enlazadas:Listas doblemente enlazadas: cada elemento dispone de dos punteros, uno a punta al siguiente elemento y el otro al elemento anterior. Al contrario que las listas abiertas anteriores, estas listas pueden recorrerse en los dos sentidos. Árboles:Árboles: cada elemento dispone de dos o más punteros, pero las referencias nunca son a elementos anteriores, de modo que la estructura se ramifica y crece igual que un árbol. Árboles binarios:Árboles binarios: son árboles donde cada nodo sólo puede apuntar a dos nodos. Grafos:Grafos: es el siguiente nivel de complejidad, podemos considerar estas estructuras como árboles no jerarquizados.

4 LISTA Cabecera Actual Datos Sgte Datos Sgte Datos Sgte Datos Sgte NULL class NODO { //Información: //Atributos y Métodos NODO *Sigte; } class LISTA { NODO *Cabecera; NODO *Actual; Public: EstaVacia(); Insertar(x, k); Buscar(x); BuscarK(k); Eliminar(x); Avanzar(); /*A vanza Actual al siguiente nodo de la lista.*/ Obtener(); /*Retorna el elemento del nodo en donde se encuentra Actual*/ }

5 REPRESENTACIÓN DE POLINOMIOS. Las listas se utilizan para almacenar los coeficientes diferentes de cero del polinomio, junto al exponente. Así, por ejemplo, dado el polinomio: P(x) = 3X X 3 + 6X - 4 Su representación mediante listas, sería la mostrada en la figura: El campo información de cada nodo de la lista contendrá dos campos: el campo COEFICIENTE y el campo EXPONENTE.

6 class Nodo { int Valor; Nodo *Sigte; public: Nodo(int v); Nodo(int v, Nodo *sig); int ConsultarValor(); Nodo* ConsultarSigte(); void AsignarASigte(Nodo *Nuevo); }; class Lista { Nodo *Cabeza, *Actual; public: Lista(); ~Lista(); bool ListaVacia(); void MoverActual(); void Mostrar(); void Inicio(); void Ultimo(); bool ConsultarActual(); int ValorActual(); void Insertar(int v); void Borrar(int v); }; LINEA 0..* 2 NODO Manejo de nodos

7 Nodo::Nodo (int v) { Valor = v; Sigte = NULL; } Nodo::Nodo (int v, Nodo *sig) { Valor = v; Sigte = sig; } int Nodo::ConsultarValor() { return Valor; } Nodo* Nodo::ConsultarSigte() { return Sigte; } void Nodo::AsignarASigte(Nodo *Nuevo) { Sigte = Nuevo; } Lista::Lista() { Cabeza = Actual = NULL; } Lista::~Lista() { Nodo *aux; while(Cabeza != NULL) { aux = Cabeza; Cabeza = Cabeza->ConsultarSigte(); delete aux; } Actual = NULL; } bool Lista::ListaVacia() { return Cabeza == NULL; } void Lista::MoverActual() { if (Actual != NULL) Actual = Actual->ConsultarSigte(); } void Lista::Inicio() { Actual = Cabeza; } void Lista::Ultimo() { Inicio(); if (!ListaVacia()) while (Actual->ConsultarSigte()) MoverActual(); } bool Lista::ConsultarActual() { return Actual != NULL; } int Lista::ValorActual() { return Actual->ConsultarValor(); }

8 void Lista::Insertar (int v) { Nodo *Anterior, *aux; //Si la Lista está vacía if( ListaVacia()) { /*Asignamos a Lista un nuevo nodo de Valor v y cuyo siguiente elemento es la lista Actual*/ Cabeza = new Nodo(v, Cabeza); } else { // Buscar el Nodo de Valor menor a v Anterior = Cabeza; /*avanzamos hasta el último elemento o hasta que el Sigte tenga un Valor mayor que v */ while( Anterior->ConsultarSigte()) Anterior = Anterior->ConsultarSigte(); /*Creamos un nuevo Nodo después del Nodo Anterior, y cuyo Sigte es el Sigte del Anterior*/ aux = Anterior->ConsultarSigte(); aux = new Nodo(v, Anterior->ConsultarSigte()); Anterior->AsignarASigte(aux); }

9 void Lista::Borrar (int v) { Nodo *Anterior, *Ref, *aux; Ref = Cabeza; Anterior = NULL; while ((Ref!= NULL) && (Ref->ConsultarValor() != v)) { Anterior = Ref; Ref = Ref->ConsultarSigte(); } if ( (Ref != NULL) && (Ref->ConsultarValor() == v) ) { // Borrar el Nodo if (!Anterior) // Primer elemento Cabeza = Ref->ConsultarSigte(); else // un elemento cualquiera { aux = Anterior->ConsultarSigte(); aux = Ref->ConsultarSigte(); Anterior->AsignarASigte(aux); } delete Ref; } void Lista::Mostrar() { Nodo *aux; aux = Cabeza; while (aux!=NULL) { cout ConsultarValor(); aux = aux->ConsultarSigte(); if (aux!= NULL) cout "; } cout << endl; }

10 int PedirDato() { int V; cout >V; return V; } int main() { Lista L; L.Insertar(PedirDato()); L.Mostrar(); cout<<"Lista de elementos:"<< endl; L.Inicio(); while(L.ConsultarActual()) { cout << L.ValorActual() << endl; L.MoverActual(); } L.Inicio(); cout<<"Cabeza: "<<L.ValorActual(); cout<<endl; L.Ultimo(); cout<<"Ultimo: "<<L.ValorActual(); cout<<endl; L.Borrar(PedirDato()); cout<<"Elementos No borrados:"; cout<<endl; L.Mostrar(); return 0; }

11 Ingrese un valor: 20 Ingrese un valor: 10 Ingrese un valor: 40 Ingrese un valor: > 20 -> 30 -> 40 Lista de elementos: Cabeza: 10 Ultimo: 40 Ingrese un valor: 10 Ingrese un valor: 15 Ingrese un valor: 45 Ingrese un valor: 30 Ingrese un valor: 40 Elementos No borrados: 20 Salida: