Colas, filas

22
Estructura de Datos Lista, pila y cola Marielys Rodriguez G. 11- 1075 Saira T. Isaac H. 11-1077

Transcript of Colas, filas

Estructura de Datos

Lista, pila y cola

Marielys Rodriguez G. 11-1075Saira T. Isaac H. 11-1077

LISTA

Objetos reales que se pueden modelar con la

estructura lista

Lista de inventario

Lista de animales

Definiciones de lista

Una lista es una estructura de datos homogénea y dinámica, que va a estar formada por una secuencia de elementos, donde cada uno de ellos va seguido de otro o de ninguno.

Lista: colección homogénea de elementos con una relación lineal entre ellos. Es decir, cada elemento de la lista (excepto el primero) tiene un único elemento predecesor y cada elemento (excepto el último) tienen un elemento suceso

TAD lista

TAD ListOrd[ TipoLO ]

e1, ..., en

{ inv: ei ei+1, i 1 i < n }

Constructoras:

inicListOrd: ListOrd

Modificadoras:

insListOrd: ListOrd x TipoLO ListOrd

elimListOrd: ListOrd x TipoLO ListOrd

 

Analizadoras:

infoListOrd: ListOrd x int TipoLO

longListOrd: ListOrd int

estaListOrd ListOrd x TipoLO int

 

Relación entre los conceptos: Ventana y el de Lista

Con relación a las listas estas se pueden organizar en manera ordenada y con respect a las ventanas, las ventanas poseen características homogéneas al momento de su desarrollo. Además aquí vemos cuales atributos y operaciones se van a realizar.

Implementaciones de Listas

Vectores : en esta representación, los elementos de la lista se sitúan consecutivamente en un vector. Maneja además dos campos adicionales que indican la longitud actual y la posición de la ventana.

Listas doblemente enlazadas: en esta representación, la lista tiene un nodo con apuntadores al primer elemento, al último y al elemento de la ventana. Los nodos, por su parte, se encuentran doblemente encadenados entre sí, para permitir que las modificadoras se puedan implementar con algoritmos O( 1 ).

Describir los mecanismos mediante los cuales los lenguajes de programación permiten implementar las listas.Implementación Para representar en lenguaje C esta estructura de datos se utilizarán punteros, un tipo de datos que suministra el lenguaje. Se representará una lista vacía con la constante NULL. Se puede definir la lista enlazada de la siguiente manera: struct lista { int clave; struct lista*sig; };

Describir cómo los lenguajes que no manejan apuntadores simulan las listas doblemente enlazadas.

Cada nodo apunta al siguiente y al anterior. Duplica el uso de la memoria necesaria para los punteros. Duplica el coste de manejo de punteros al insertar y eliminar. La eliminación se simplifica . No es necesario buscar el elemento anterior.

PILA

Objetos reales que se pueden modelar con la estructura Pila

Almacén de libros

Agrupación de ladrillos

Cuando se montan y desmontan cajas de un camión

Definiciones de Pila

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.

Una pila es una estructura de datos en la cual solo se pueden hacer 2 operaciones : colocar elemento al final o quitar un elemento del final.

TAD Pila

TAD Pila[ TipoP ]

{ inv: TRUE }

Constructoras:

inicPila: Pila

Modificadoras:

adicPila: Pila x TipoP Pila

elimPila: Pila Pila

 

Analizadoras:

infoPila: Pila TipoP

vaciaPila: Pila  int

 

Destructora:

destruirPila: Pila

Implementar las pilas a través de listas y vectores

A traves de vectores:

En esta implementación se utiliza un objeto abstracto del TAD Lista para representar una pila. El esquema de representación es el siguiente:

La pila pil =  se representa con la lista < e1, e2 ... eN>.

La pila vacía (pil = ) se representa internamente como una lista sin elementos (pil = < >).

Implementar las pilas a través de listas y vectores

A traves de vectores:

Un vector es una buena manera de representar una pila, si se conoce con anterioridad el número máximo de elementos que va a contener. Sólo se necesita algún medio para marcar el tope de la pila, puesto que los elementos se colocan en casillas consecutivas a partir de la primera.

La pila pil =  se representa con la estructura: 

La pila vacía pil = se representa con un cero en el campo que indica la posición del tope:

COLA

Objetos reales que se pueden modelar con la estructura cola

Cola de impression

Filas en Banco

Filas de los supermercados

Definiciones de cola

Una cola es una estructura de datos, en la cual solo se pueden aplicar estas dos operaciones : colocar un elemento al final, o quitar un elemento del principio.

Se entiende por cola una estructura de datos en la que se añaden nuevos ítems en un extremo y se suprimen ítems viejos en el opuesto.

TAD Cola TAD Cola[ TipoC ]

{ inv: TRUE }

Constructoras:

inicCola: Cola

Modificadoras:

adicCola: Cola x TipoC Cola

elimCola: Cola Cola

 

Analizadoras:

infoCola: Cola TipoC

vaciaCola: Cola  int

 

Destructora:

destruirCola: Cola

Particularidades de un TAD Cola con prioridades

 TAD ColaP[ TipoCP ]

[ x1«p1] [ x2«p2] .... [ xn«pn]

{ inv: pi pk , i < k }

Constructoras:

inicColaP: ColaP

Modificadoras:

adicColaP: ColaP x TipoCP x int ColaP

elimColaP: ColaP ColaP

 

Analizadoras:

infoColaP: ColaP TipoCP

vaciaColaP: ColaP int

 

Destructora:

destruirColaP: ColaP

Particularidades de un TAD Cola con prioridades

La diferencia semántica está en que el elemento eliminado de la lista no es, necesariamente, el primero que fue añadido. Más bien, es el elemento de la cola que tiene la prioridad más alta. En la implementación de la Cola de Prioridad no se especifica ni qué son las prioridades ni cómo se comparan entre ellas. Depende de los elementos que haya en la cola.

Por ejemplo, si los elementos de la cola tienen nombres, podemos elegirlos en orden alfabético. Si son puntuaciones de bolos, podemos ir desde la más alta hasta la más baja, pero si son puntuaciones de golf, iríamos desde la más baja hasta la más alta. Mientras podamos comparar los elementos de la cola, podremos encontrar y eliminar el de mayor prioridad.

Implementaciones de Colas con vectores circulares

Si se representa una cola con un vector, las rutinas que implementan las operaciones del TAD tienen la siguiente complejidad:

La ineficiencia en la operación que elimina un elemento ( elimCola - O( n ) ) se debe a la necesidad de desplazar todos los elementos de la estructura, para ocupar el lugar liberado después de sacar el primero. Una posibilidad para evitar este movimiento es marcar los lugares dentro del arreglo donde comienza y termina la cola.

inicCola O( 1 )

adicCola O( 1 )

elimCola O( N )

infoCola O( 1 )

vaciaCola O( 1 )