Listas

16,542 views

Published on

Tema: Listas
Unidad Curricular: Desarrollo de Software
Dirigido a: PNFSI Misión Sucre

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
16,542
On SlideShare
0
From Embeds
0
Number of Embeds
502
Actions
Shares
0
Downloads
296
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Listas

  1. 1. PNFSI Asignatura: Desarrollo de Software Tema: Listas Ing. Zamantha González Díaz Abril, 2008
  2. 2. Tema: Listas Contenido • Tipo de Dato Abstracto (TDA). • Listas lineales. • Tipos de implementaciones de listas. • Pilas y Colas. • Implementación en C++
  3. 3. Tipo de Dato Abstracto Un Tipo de Dato Abstracto (TDA) se define como un modelo matemático con un conjunto de operaciones que se definen sobre este modelo. Define un tipo de dato e incluye la descripción de todo el comportamiento asociado al dato. No está asociado a ninguna implementación. El implementar un TDA supone la traducción de las especificaciones del TDA en las sintaxis de un lenguaje de programación en particular.
  4. 4. Tipo de Dato Abstracto Al implementar un TDA en la POO, se debe encapsular toda la lógica de almacenamiento y lograr que la comunicación sea a través de los métodos de acceso que se definen en la interfaz pública de la implementación del TDA.
  5. 5. Conceptos básicos Se denomina Nodo, elemento o también ítem, a la unidad de información más elemental o indivisible.
  6. 6. TDA Lista Lineal Una lista lineal es un conjunto de N nodos l1, l2, … ln, con n  0, cuyas propiedades estructurales esenciales incluyen sólo las posiciones lineales (unidimensionales) relativas de los nodos; para ella se definen operaciones como las siguientes: • Tener acceso a un nodo. • Insertar y eliminar un nodo en la lista. • Combinar dos o más listas en una. • Dividir una lista en dos o más listas. • Determinar la cantidad de nodos de la lista. • Ordenar la lista de acuerdo a un criterio. • Buscar un elemento bajo una condición.
  7. 7. TDA Lista Lineal Aclaraciones: • n = 0 denota a la lista vacía, o sea, una lista que no tiene elementos. • Si n > 0, l1 es el primer nodo. • Si 1 < k < n, lk es precedido por el nodo lk-1 y seguido por el nodo lk+1. • Si n > 0, IN es el último nodo.
  8. 8. TDA Lista Lineal Una misma definición de un TDA puede conllevar a implementaciones diferentes en dependencia de las necesidades, así como de las características del lenguaje en el que se va a desarrollar dicha implementación. Por su forma de almacenamiento, la lista lineal se puede implementar en una de las siguientes disposiciones: • Secuencial • Enlazada
  9. 9. Lista Secuencial Una de las formas más simples de implementación de este TDA es usando un arreglo unidimensional. Todos los elementos de la lista se almacenan en posiciones de memoria consecutivas. Por eso se habla de disposición secuencial en la memoria de la computadora. A la lista se le conoce como lista secuencial.
  10. 10. Lista Secuencial ... 1 2 3 4 5 N Índice del último Cantidad física nodo de la lista de elementos del arreglo
  11. 11. Ventajas y desventajas Ventajas Con esta disposición se accede a cualquier elemento de la estructura de datos en tiempo constante. Desventajas Al asignar el arreglo en tiempo de compilación debe establecerse un límite a priori sobre el número de elementos que pueden ser almacenados en las listas. Para inserciones y eliminaciones frecuentes hay que hacer corrimientos costosos.
  12. 12. Lista enlazada En una lista enlazada se asigna memoria para el almacenar los elementos de la lista conforme se va necesitando, es decir a medida que se añaden o insertan los elementos, y se conectan los elementos de la lista con punteros. La memoria es liberada cuando ya no se necesita más un elemento en la lista. Esquemáticamente una lista enlazada se representa por una secuencia de nodos conectados por enlaces.
  13. 13. Lista enlazada primero Cada nodo está conectado al siguiente por un solo enlace, a esta estructura de datos se llama lista simplemente enlazada.
  14. 14. Lista enlazada •Un nodo de una lista simplemente enlazada contiene dos campos: datos (contiene un elemento de la lista) y siguiente (almacena un enlace al siguiente nodo de la lista). •El campo siguiente del último nodo contiene un símbolo especial que indica el final de las lista. •Se accede a la lista por medio de un apuntador al primer elemento y solo se puede recorrer la lista en un sentido, del primer nodo al último nodo.
  15. 15. Lista doblemente enlazada •… primero Cada nodo contiene tres campos: un campo que almacena el elemento de la lista y los otros dos almacenan los enlaces a los nodos precedente y siguiente de la lista. Se usan punteros nulos para marcar ambos extremos de la lista.
  16. 16. Lista enlazada circular primero El campo siguiente del último nodo de la lista apunta al primer nodo de la lista.
  17. 17. Lista doblemente enlazada circular •… primero El campo siguiente del último nodo apunte al primer nodo de la lista y el campo anterior del primer nodo apunte al último nodo de la lista.
  18. 18. Ventajas y desventajas Ventajas No es preciso conocer la cantidad de elementos en tiempo de compilación. Ni las inserciones ni las eliminaciones implican realizar corrimientos de los elementos de la lista. Desventajas No permite el acceso directo a un elemento arbitrario de la lista. Para acceder al i-ésimo elemento, debemos recorrer la lista, comenzando por el primer nodo, hasta llegar al elemento deseado.
  19. 19. primero Pila (tope) Una pila (stack) es un conjunto dinámico que obedece al orden LIFO. La pila es un caso particular de lista en la que todas las inserciones y extracciones de elementos se realizan por un solo extremo, llamado el tope de la pila.
  20. 20. Operaciones en pilas Estas operaciones reciben nombres especiales: •Insertar (x). Inserta x en S. (Apilar o Push). •Tope. Devuelve el elemento que fue insertado más recientemente en S. (Cima). •Eliminar. Devuelve el elemento que fue insertado más recientemente y lo elimina. (Desapilar o Pop). •Vacía. Devolver si la pila está vacía.
  21. 21. Cola primero Una cola (queue) es un conjunto dinámico que obedece al orden FIFO. La cola es un caso particular de lista para la que todas las inserciones se realizan siempre por un extremo y las extracciones se realizan siempre por el extremo opuesto. último
  22. 22. Operaciones en colas Estas operaciones reciben nombres especiales: •Insertar (x). Inserta x en la cola. •Primero. Devuelve el elemento que lleva más tiempo en la cola. •Eliminar. Devuelve el elemento que lleva más tiempo en la cola y lo elimina. (Avanzar) •Vacía. Devolver si la cola está vacía.
  23. 23. Ejemplos Un ejemplo de pila lo constituye el mecanismo que establecen los lenguajes de programación para garantizar las llamadas anidadas a subprogramas dentro de una aplicación. Un ejemplo de cola es la cola de impresión en el sistema operativo Windows. Cada usuario de una red de Windows coloca sus trabajos de impresión y el sistema lo imprime en el mismo orden en que fueron insertados en la cola de impresión.
  24. 24. Cola secuencial ... 0 1 2 3 4 N-1 Índice del Índice del primer elemento último elemento Cantidad física de elementos
  25. 25. Cola secuencial •No hay correspondencia entre la posición del último nodo y la cantidad de nodos de la cola. •La condición de cola llena y de cola vacía, no se pueden verificar haciendo uso del índice del arreglo.
  26. 26. Cola circular 0 1 N-1 2 . . 3 13 4 12 5 11 6 10 7 9 8 La cola circular propone tratar el arreglo como un círculo donde cuando aLength se hace igual a aSize, el siguiente elemento es el de índice 0. Esto permite utilizar todos los espacios que quedan libres en el arreglo luego de realizar eliminaciones de nodos.
  27. 27. Implementación en C++ •TBaseList •TSeqList •TLinkedList •TGSeqList •TGLinkedList •TDoubleList •TCircLinked •TNode •TDoubleCirc •TDoubleNode
  28. 28. Facilidades de los lenguajes Los lenguajes de programación proporcionan utilidades que permiten al desarrollador crear estructuras de datos. Objetivo: proporcionar clases, interfaces y algoritmos para utilizar las estructuras de una manera estandar.

×