listas

28
Asignatura: Desarrollo de Software Tema: Listas PNFSI Ing. Zamantha González Díaz Abril, 2008

Upload: zamantha-gonzalez-universidad-nacional-abierta

Post on 01-Dec-2014

18.795 views

Category:

Technology


3 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Listas

Asignatura: Desarrollo de Software

Tema: Listas

PNFSI

Ing. Zamantha González Díaz Abril, 2008

Page 2: Listas

Tema: Listas

Contenido

• Tipo de Dato Abstracto (TDA).

• Listas lineales.

• Tipos de implementaciones de listas.

• Pilas y Colas.

• Implementación en C++

Page 3: Listas

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.

Page 4: Listas

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.

Page 5: Listas

Conceptos básicos

Se denomina Nodo, elemento o también ítem, a la

unidad de información más elemental o indivisible.

Page 6: Listas

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.

Page 7: Listas

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.

Page 8: Listas

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

Page 9: Listas

Lista Secuencial

Una de las formas más simples de implementaciónde este TDA es usando un arreglo unidimensional.

Todos los elementos de la lista se almacenan enposiciones de memoria consecutivas. Por eso sehabla de disposición secuencial en la memoria de lacomputadora.

A la lista se le conoce como lista secuencial.

Page 10: Listas

Lista Secuencial

. . . 1 2 3 4 5 N Índice del último Cantidad física nodo de la lista de elementos del arreglo

Page 11: Listas

Ventajas y desventajas

Ventajas

Con esta disposición se accede a cualquier elementode la estructura de datos en tiempo constante.

Desventajas

Al asignar el arreglo en tiempo de compilación debeestablecerse un límite a priori sobre el número deelementos que pueden ser almacenados en laslistas.

Para inserciones y eliminaciones frecuentes hay quehacer corrimientos costosos.

Page 12: Listas

Lista enlazada

En una lista enlazada se asigna memoria para elalmacenar los elementos de la lista conforme se vanecesitando, es decir a medida que se añaden oinsertan los elementos, y se conectan los elementosde la lista con punteros.

La memoria es liberada cuando ya no se necesitamás un elemento en la lista.

Esquemáticamente una lista enlazada se representapor una secuencia de nodos conectados por enlaces.

Page 13: Listas

Lista enlazada

Cada nodo está conectado al siguiente por un solo

enlace, a esta estructura de datos se llama lista

simplemente enlazada.

primero

Page 14: Listas

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.

Page 15: Listas

Lista doblemente enlazada

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.

primero•…

Page 16: Listas

Lista enlazada circular

El campo siguiente del último nodo de la lista apunta

al primer nodo de la lista.

primero

Page 17: Listas

Lista doblemente enlazada circular

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.

primero•…

Page 18: Listas

Ventajas y desventajas

Ventajas

No es preciso conocer la cantidad de elementos entiempo de compilación.

Ni las inserciones ni las eliminaciones implicanrealizar corrimientos de los elementos de la lista.

Desventajas

No permite el acceso directo a un elemento arbitrariode la lista. Para acceder al i-ésimo elemento,debemos recorrer la lista, comenzando por el primernodo, hasta llegar al elemento deseado.

Page 19: Listas

Pilaprimero

(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.

Page 20: Listas

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.

Page 21: Listas

Cola

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.

primero

último

Page 22: Listas

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.

Page 23: Listas

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.

Page 24: Listas

Cola secuencial

. . . 0 1 2 3 4 N-1 Índice del Índice del primer elemento último elemento Cantidad física de elementos

Page 25: Listas

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.

Page 26: Listas

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.

Page 27: Listas

Implementación en C++

•TSeqList

•TGSeqList

•TLinkedList

•TGLinkedList

•TDoubleList •TCircLinked

•TBaseList

•TDoubleCirc

•TNode

•TDoubleNode

Page 28: Listas

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.