Facultad de Ciencias Exactas, Ingenierı́a y Agrimensura Escuela de Ciencias Exactas y Naturales Departamento de Computación Estructuras de Datos Práctica 3 Tipos Abstractos de Datos 1. Las listas finitas pueden especificarse como un TAD de la siguiente manera: tad L i s t ( α : : Set ) introduces nil : : L i s t α n u l l : : L i s t α → Bool cons : : α → L i s t α → L i s t α head : : L i s t α → α t a i l : : List α → List α asserts ... (a) Especifique las propiedades que debe satisfacer cualquier implementación de listas (b) Asumiendo que α es un tipo con igualdad, especifique una función in :: List α → α → Bool tal que in( ls ,x) = true si y sólo si x es un elemento de ls (c) Especifique una función que elimina todas las ocurrencias de un elemento dado. 2. Especifique el TAD pila, con las siguientes operaciones: empty: Construye una pila inicialmente vacı́a push: Agrega un elemento a la pila isEmpty: Devuelve verdadero si su argumento es una pila vacı́a, falso en caso contrario top: Devuelve el elemento que se encuentra al tope de la pila pop: Saca el elemento que se encuentra al topo de la pila 3. Asumiendo que α es un tipo con igualdad,. (a) complete la especificación del TAD conjunto. tad Conjunto ( α : : Set ) introduces ∅ : : Conjunto α e s V a c i o : : Conjunto α → Bool ∈ : : α → Conjunto α → Bool i n s e r t a r : : α → Conjunto α → Conjunto α b o r r a r : : α → Conjunto α → Conjunto α ∪ : : Conjunto α → Conjunto α → Conjunto α ∩ : : Conjunto α → Conjunto α → Conjunto α \ : : Conjunto α → Conjunto α → Conjunto α asserts i n s e r t a r x ( i n s e r t a r x A) = i n s e r t a r x A i n s e r t a r x ( i n s e r t a r y A) = i n s e r t a r y ( i n s e r t a r x A) ... Práctica 3 Tipos Abstractos de Datos Página 1 Estructuras de Datos (b) ¿Que pasarı́a si se agregase una función choose :: Conjunto α → α, tal que c h o o s e ( i n s e r t a r x A) = x ? 4. Un TAD map se utiliza para almacenar una colección de entradas que constan de claves y sus valores. Las claves son únicas, aunque no tienen por qué serlos los valores. Las operaciones habituales en una estructura de este tipo son: Comprobar si está o no vacı́a. Comprobar si una clave está en la estructura map. Obtener el número de pares clave/valor almacenados. Obtener el valor asociado a una clave. Añadir un nuevo par clave/valor a la estructura de datos. Eliminar una clave dada y su valor asociado. Construir una lista ordenada por la clave con los pares clave/valor almacenados en la estructura de datos. Realizar una especificación del TAD map ası́ como de las operaciones mencionadas. 5. Especifique el tipo de los árboles binarios cuyos nodos internos almacenan valores de un tipo α (las hojas no guardan información). Las funciones sobre árboles son las siguientes: hoja : Construye un árbol vacı́o nodo : Dados dos árboles t1 , t2 , y un elemento a : α, construye un árbol con raı́z a, hijo izquierdo t1 e hijo derecho t2 raiz : Dado un árbol, devuelve el elemento almacenado en su raı́z hijoIzq : Dado un árbol, devuelve el subárbol izquierdo hijoDer : Dado un árbol, devuelve el subárbol derecho altura : Devuelve la altura de un árbol balanceado : Devuelve true si y sólo si el árbol está balanceado 6. Un red-black tree1 . es un árbol binario de búsqueda cuyos nodos internos están coloreados o con rojo o con negro (las hojas no guardan información). Además, este tipo de datos cumple con las siguientes reglas de balanceo: Condición Roja: Todo nodo rojo tiene un padre negro. Condición Negra: Todos los caminos desde de la raı́z del árbol hasta una hoja contienen exactamente la misma cantidad de nodos negros. Especificar el TAD Red-Black-Tree. 1 También conocido como penguin tree Práctica 3 Tipos Abstractos de Datos Página 2