Transcript

Estructura de Datos

Lista, pila y cola

Marielys Rodriguez G. 11-1075

Saira 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 = < >).

Un vector es una buena manera de representar una pila, si seconoce con anterioridad el número máximo de elementos que va acontener. Sólo se necesita algún medio para marcar el tope de lapila, puesto que los elementos se colocan en casillas consecutivasa 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

Cola de impression

Filas en Banco

Filas de los supermercados

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[ 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

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

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.

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 )

top related