7
Ejercicios de Estructuras de Datos 2012/2013 J. Lázaro

Ejercicios pilas y_colas

Embed Size (px)

DESCRIPTION

 

Citation preview

  • 1. Ejercicios de Estructuras de Datos 2012/2013 J. Lzaro

2. Pilas y Colas Ejercicio 1.- Dar una implementacin esttica del TAD pila basada en un vector. Ejercicio 2.- Extender la especificacin de pilas vista en clase con las siguientes operaciones: calcular el nmero de elementos de la pila (profundidad) consultar el elemento del fondo de la pila obtener la inversa de la pila concatenar dos pilas Recordemos que la especificacin de pila era la siguiente: espec PILA[ELEM] usa BOOLEANOS, NATURALES {NATURALES es para las operaciones nuevas} parmetro formal gneros elemento fparmetro gneros pila operaciones pvaca: -> pila parcial cima: pila -> elemento apilar: pila elemento -> pila parcial desapilar: pila -> pila vaca?: pila -> bool var x: elemento p, q: pila ecuaciones definitud Def(desapilar(apilar(p,x))) Def(cima(apilar(p,x))) ecuaciones cima(apilar(p,x)) = x desapilar(apilar(p,x)) = p vaca?(pvaca) = T vaca?(apilar(p,x)) = F fespec 3. En cuanto a las operaciones que se requieren: operaciones num_elem: pila -> natural parcial fondo: pila -> elemento inversa: pila -> pila concatenar: pila pila -> pila var x,y:elemento; p: pila ecuaciones num_elem(pvaca) = 0 num_elem(apilar(p,x)) = suc(num_elem(p)) inversa(p) = inversa_aux(p,pvaca) inversa_aux(pvaca,p) = p inversa_aux(apilar(p,x),q) = inversa_aux(p,apilar(q,x)) fondo(p) = cima(inversa(p)) { otra posibilidad sera tener las ecuaciones siguientes: fondo(apilar(pvaca,x)) = x vaca?(p)=F => fondo(apilar(p,x)) = fondo(p) } concatenar(pvaca,p) = p concatenar(apilar(p,x),q) = apilar(concatenar(p,q),x) fespec Ejercicio 3.- Utilizando la representacin del TAD vista en el ejercicio anterior, dar la implementacin en pseudocdigo de las operaciones: copiar, que devuelve una pila con igual contenido a la de entrada pero utilizando posiciones de memoria diferentes anular, que libera de la memoria el espacio usado por la pila pasada como argumento Ejercicio 4.- Una secuencia es una estructura lineal con un punto de inters donde se realizan las modificaciones y las consultas. Especificar el tipo de las secuencias, representando una secuencia mediante un par de pilas, incluyendo las siguientes operaciones: crear una secuencia vaca insertar un elemento delante del punto de inters eliminar un elemento en el punto de inters consultar un elemento en el punto de inters avanzar el punto de inters trasladar el punto de inters al comienzo de la secuencia determinar si el punto de inters se encuentra al final de la secuencia determinar si la secuencia es vaca 4. Ejercicio 5.- Una expresin aritmtica construida con los operadores binarios +, -, *, / y constantes (representadas cada uno por un carcter) se dice postfija si, o bien es una nica constante, o bien,consiste en dos expresiones de forma postfija una tras otra, seguidas inmediatamente por un operador; por ejemplo, la expresin (A/(B-C))*(D+E) se escribira en forma postfija como ABC-/DE+*. Disear un algoritmo que calcule el valor de una expresin dada en forma postfija, suponiendo que la expresin viene dada mediante una secuencia (ver ejercicio 4), hay disponible una funcin valor que asocia a cada constante su valor numrico, hay funciones que calculan el valor correspondiente a cada operador. Ejercicio 6.- Implementar una funcin que compruebe si una sucesin de parntesis abiertos y cerrados est equilibrada, es decir, si a cada parntesis abierto le corresponde uno cerrado y adems estn bien anidados. Ejercicio 7.- (Examen del Grado en Ingeniera Informtica, Noviembre 2010) Especificar el TAD colas de caracteres (se puede suponer que se tienen generadoras constantes para todas las letras del alfabeto y una operacin de orden , pero el resto de las posibles operaciones auxiliares hay que especificarlas), aadiendo operaciones: concatenar dos colas de caracteres, mezclar alternativamente los elementos de dos colas de caracteres (no tienen porqu tener necesariamente la misma longitud), quitar la primera mitad (redondeando la cantidad a la baja si es necesario) de la cola, comprobar si la cola est ordenada alfabticamente, ver si la cola representa una palabra, entendiendo por palabra una sucesin de caracteres que no tiene dos vocales o dos consonantes seguidas. espec COLA[CARACTERES]+ usa BOOLEANOS parametro formal generos caracter operaciones { el enunciado permite suponer las generadoras y } vocal?: caracter bool ecuaciones vocal?(x) = (x eq A) (x eq E) (x eq I) (x eq O) (x eq U) fparametro generos cola 5. operaciones cvaca: cola aadir: cola caracter cola parcial primero: cola caracter parcial eliminar: cola cola vaca?: cola bool concatenar: cola cola cola mezclar: cola cola cola mitad: cola cola ordenada?: cola bool palabra?: cola bool var x,y: caracter; c,c2: cola ecuaciones de definitud Def(primero(aadir(c,x))) Def(eliminar(aadir(c,x))) ecuaciones primero(aadir(cvaca,x)) = x vaca?(c)=F primero(aadir(c,x)) = primero(c) eliminar(aadir(cvaca,x)) = cvaca vaca?(c)=F eliminar(aadir(c,x)) = aadir(eliminar(c),x) vaca?(cvaca) = T vaca?(aadir(c,x)) = F concatenar(c,cvaca) = c concatenar(c,aadir(c2,x)) = aadir(concatenar(c,c2),x) mezclar(c,cvaca) = c vaca(c2)=F => mezclar(cvaca,c2) = c2 {si las dos colas tienen elementos, se coge el primero de cada una de ellas, se pone en una cola aparte y se concatena con las colas restantes} (vaca?(c)=F) (vaca?(c2)=F) mezclar(c, c2) = concatenar(aadir(aadir(cvaca,primero(c1)),primero(c2)), mezclar(eliminar(c),eliminar(c2))) mitad(cvaca) = cvaca mitad(aadir(c,x)) = aadir(mitad(eliminar(c),x)) 6. {otra opcin para quitar la mitad de elementos sera usar una operacin auxiliar quitar: cola nat cola, junto con las operaciones longitud de colas y divisin entera de naturales, que habra que definir aparte, y las siguientes ecuaciones quitar(c,0) = c (n>0)=T quitar(c,n) = quitar(eliminar(c),n-1) mitad(c) = quitar(c, longitud(c) div 2) } ordenada?(cvaca) = T ordenada?(aadir(cvaca,x)) = T (xy)=T ordenada?(aadir(aadir(c,x),y)) = ordenada?(aadir(c,x)) (xy)=F ordenada?(aadir(aadir(c,x),y)) = F palabra?(cvaca) = T palabra?(aadir(cvaca,x)) = T (vocal?(x)=vocal?(y)) palabra?(aadir(aadir(c,x),y)) = F (vocal?(x)vocal?(y)) palabra?(aadir(aadir(c,x),y)) = palabra?(aadir(c,x)) fespec Ejercicio 8.- Extender la especificacin de cola vista en teora con las siguientes operaciones: consultar el ltimo elemento de la cola obtener la inversa de la cola concatenar dos colas, colocando la segunda a continuacin de la primera. Ejercicio 9.- Un sistema operativo recibe mensajes de los dispositivos conectados al sistema. Dichos mensajes se dividen en dos categoras: crticos y no crticos. El sistema operativo atiende primero a los mensajes crticos por orden de llegada (si los hubiera) y, despus, a los no crticos tambin por orden de llegada. Especificar un TAD que gestione la cola de mensajes que disponga al menos de las siguientes operaciones: crear una cola vaca aadir un nuevo elemento consultar el primer elemento consultar el nmero de mensajes crticos de la cola consultar el nmero de mensajes no crticos de la cola consultar si la cola est vaca Disear una implementacin de la cola de mensajes en pseudocdigo (en su defecto en C++) empleando memoria dinmica. 7. Ejercicio 10.- (Examen del Grado en Ingeniera de Computadores, Noviembre 2011) Suponiendo disponibles las especificaciones COLA[ELEMENTO] y PILA[ELEMENTO], se quiere crear un tipo nuevo colapila para la gestin de una cola y una pila a la vez, de manera que todas las inserciones y eliminaciones de elementos de una colapila se hagan en su parte de cola. Crear un TAD para colapila con operaciones para crear una colapila, comprobar si una colapila tiene algn elemento, aadir un elemento a una colapila, quitar un elemento de una colapila, pasar la cola de la colapila a su parte de pila, pasar la pila de la colapila a su parte de cola, y vaciar completamente una colapila. Ejercicio 11.- (Examen del Grado en Ingeniera Informtica, Noviembre 2011) Dar la especificacin del TAD cola. Ampliar dicha especificacin creando un tipo nuevo doblecola para la gestin de dos colas a la vez, que permita las operaciones descomponer : cola doblecola, que pone los elementos que hay en una cola repartindoles de manera alterna en una doblecola, y mezclar : doblecola cola, que mezcla alternativamente los elementos de una doblecola en una nica cola. Implementar en pseudo-cdigo tanto los tipos necesarios para la especificacin ampliada como las operaciones nuevas. Ejercicio 12.- (Examen del Grado en Ingeniera Informtica, Noviembre 2011) Se conoce el TAD conjunto de elemento con las siguientes operaciones: : conjunto insertar: conjunto elemento conjunto borrar: conjunto elemento conjunto est?: conjunto elemento bool as como la especificacin PILAS[CONJUNTO[ELEMENTO]]. Aadir operaciones para: comprobar si un elemento est en todos los conjuntos de la pila, comprobar si todos los conjuntos de la pila tienen, al menos, los mismos elementos que el conjunto de la cima, quitar un elemento de todos los conjuntos de la pila, crear un nico conjunto con todos los elementos de los conjuntos de la pila, quitar todos los conjuntos vacos de la pila.