EXAMEN D`ESTRUCTURES DE DADES I ALGORISMES (ITIG

Anuncio
EXAMEN D’ESTRUCTURES DE DADES I ALGORISMES
(ITIG – EPSA)
Alcoi a 12 de Setembre de 2005
Tiempo estimado: 2 horas
Ejercicio 1: (4 puntos)
Sea la siguiente definición del TAD lista:
lista * crearl();
lista * insertar(lista * l, int e, posicion p);
lista * borrar(lista * l, posicion p);
int recuperar(lista * l, posicion p);
int vacial(lista * l);
posicion fin(lista * l);
posicion principio(lista * l);
posicion siguiente(lista * l, posicion p);
Sin conocer los detalles de su implementación, se pide desarrollar las siguientes
funciones:
a) Unión de dos listas (l1 ∪ l2)
lista * union(lista * l1, lista * l2);
b) Intersección de dos listas (l1 ∩ l2)
lista * interseccion(lista * l1, lista * l2);
c) Diferencia de dos listas (l1 – l2)
lista * diferencia(lista * l1, lista * l2);
d) Determinar si una lista l2 está incluida en l1 (l2 ⊆ l1), es decir, todos y cada uno
de los elementos de l2 está en l1
int incluida(lista * l1, lista * l2);
Ejercicio 2. (3 puntos)
Cuestiones:
a) Detallar en qué consisten los algoritmos Divide y Vencerás y cuándo obtienen
soluciones eficientes. En el caso del Quicksort ¿Cuál es su mejor y peor caso y en
qué circunstancias se dan?
b) ¿Cuál es el coste de las operaciones de inserción y búsqueda de elementos en una
tabla de dispersión, cuando en ésta se dan las condiciones óptimas? ¿Cuáles son
esas condiciones?
c) Detallar, en pseudocódigo, el algoritmo de Dijkstra y describir en qué se fundamenta.
Ejercicio 3: (3 puntos)
Sea la siguiente definición de árbol binario de búsqueda:
typedef int tipo_baseT;
typedef struct snodo {
tipo_baseT clave;
struct snodo *hizq, *hder;
}abb;
Desarrollar una función que imprima los valores comprendidos en el rango [r1, r2]
donde r1 <= r2.
void rango(abb * T, int r1, int r2);
Descargar