3. Objetos reales que se pueden
modelar con la estructura lista
Lista de inventario
Lista de animales
4. 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
5. 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
6. 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.
7. 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 ).
8. 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; };
9. 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.
11. 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
12. 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.
13. 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
14. 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 = < >).
15. 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:
17. Cola de impression
Filas en Banco
Filas de los supermercados
18. 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.
19. 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
20. 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
21. 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.
22. Si se representa una cola con un vector, las rutinas que
implementan las operaciones del TAD tienen la siguiente
complejidad: inicCola O( 1 )
adicCola O( 1 )
elimCola O( N )
infoCola O( 1 )
vaciaCola O( 1 )
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.