UNIVERSIDAD TECNOLÓGICA METROPOLITANA FACULTAD DE INGENIERÍA Profesores : Mauro Castillo V. : Héctor Pincheira C. DEPARTAMENTO DE INFORMÁTICA Y COMPUTACIÓN PRUEBA N° 1 ESTRUCTURAS DE DATOS SEGUNDO SEMESTRE DE 2005 1 2 3 4 1.0 Nombre Completo Problema 1 (1.5) Un Árbol Par Derecho (APD) es un árbol binario con: Cero nodos, ó Un número par de nodos distribuidos como una raíz, con un subárbol izquierdo que es una hoja y un subárbol derecho que es un APD. Considerando la definición typedef Nodo *Doslinks; implementar el operador iterativo Doble(A) que convierte un APD A, de tipo Doslinks, en una lista lineal de enlace doble. Esto significa que, por utilizar los mismos nodos de A, la lista también será de tipo Doslinks. Problema 2 (1.5) Con respecto a un stack S de valores enteros no negativos, implementar el operador recursivo Clonar(S) que modifica S, generando sobre cada uno de sus elementos, una cantidad de copias equivalente a su valor numérico. UNIVERSIDAD TECNOLÓGICA METROPOLITANA FACULTAD DE INGENIERÍA Profesores : Mauro Castillo V. : Héctor Pincheira C. DEPARTAMENTO DE INFORMÁTICA Y COMPUTACIÓN Problema 3 (1.5) El TAD matriz dispersa se representa de la forma typedef struct Dispersa{int f; int c; base nulo; Compacta a;}; y, sobre una variable S de tipo Dispersa, es posible aplicar los siguiente operadores: Eom(S) : Indica que en S no quedan elementos. Primero(S, i, j) : Retorna los índices del elemento actual en S y se posiciona en el siguiente elemento. Agregar(S, i, j, e) : Agrega en S el elemento e en la posición i, j. Valor(S, i, j) : Retorna el valor del elemento de índices i, j en S. Considérense las matrices A, B, C, de tipo Dispersa y A, B del mismo orden, para implementar el operador Sumar(A, B, C), correspondiente a la operación C = A + B, tal que Cij = Aij + Bij sí y sólo sí Aij 0 y Bij 0. Problema 4 (1.5) Un polinomio se representa mediante dos colas Q y R que contienen: los coeficientes (reales) la primera y los exponentes (enteros) la segunda. Las colas tienen la misma cantidad de elementos y existe una correspondencia posicional entre coeficiente y exponente para cada término del polinomio. Implementar el operador recursivo Evaluar(Q, R, x) que evalúa un polinomio así representado en el punto x. UNIVERSIDAD TECNOLÓGICA METROPOLITANA FACULTAD DE INGENIERÍA Profesores : Mauro Castillo V. : Héctor Pincheira C. DEPARTAMENTO DE INFORMÁTICA Y COMPUTACIÓN SOLUCIÓN PRUEBA 1 * ESTRUCTURAS DE DATOS * SEM. 2-05 Problema 1 (1.5) Doslinks Doble(Doslinks &A) { Doslinks D, P, Q; P = NULL; While(A != NULL) { Q = A->izq; Q->izq = P; Q->der = A; if(P != NULL) P->der = Q; else D = Q; P = A; A = A->der; } } Problema 2 (1.5) void Clonar(Stack &S) { if(!S.Empty()) { int e = S.Pop(); Clonar(e, S); S.Push(e); for(int i=0; i<e; i++) S.Push(e); } } Problema 3 (1.5) void Sumar(Dispersa &A, Dispersa &B, Dispersa &C) { int i, j; Base e; C.f = A.f; C.c = A.c while(!Eom(A)) { Primero(A, i, j); e = Valor(B, i, j); if(e != 0); Agregar(C, j, i, Valor(A, i, j) + e); } } Problema 4 (1.5) float Evaluar(Cola &Q, Cola &R, float x) { if(!Q.Vacia()) { float c = Q.Extraer(); int e = R.Extraer(); return c*pow(x, e) + Evaluar(Q, R, x); } else return 0; }