Você está na página 1de 8

Algoritmos y Programacin II

Ctedra Lic. Gustavo Carolo

Gua de Ejercicios
Listas, Pilas y Colas

Listas, Pilas y Colas Ejercicios de Abstraccin


1) Realizar un procedimiento que cuente la cantidad de elementos de una cola. Lo mismo para una pila y una lista. Las estructuras deben quedar en el estado original. 2) Realizar un procedimiento que invierta el orden de la cola. Lo mismo para una pila y una lista. 3) Realizar un procedimiento que saque el elemento N de la cola. Lo mismo para una pila y una lista. Tener en cuenta que los dems elementos deben quedar en el mismo orden. 4) Realizar un procedimiento que ingrese un elemento en la posicin N de una cola. Lo mismo para una pila y una lista. Tener en cuenta que los dems elementos deben quedar en el mismo orden. 5) Una cola prioridad tiene una estructura similar a la de una cola, con la diferencia que cada elemento tiene un campo que indica su prioridad. Los elementos se ingresan en la cola segn el orden de prioridad. Realizar dos procedimientos, uno para ingresar un elemento en la cola prioridad y otro para extraerlo. Utilizar para ello un TDA COLA.

Ejercicios de Implementacin
1) Rehacer los ejercicios 1 a 4 de Abstraccin, pero desde la implementacin. No se pueden usar estructuras auxiliares ni primitivas del tipo. 2) Implementar las primitivas cola sacar y cola ingresar de la cola prioridad. Considerar que el nodo de la cola tiene un campo que indica la prioridad del elemento. 3) Modificar la primitiva MoverCte de una lista simple para permitir movimiento al anterior. Recordar que la lista no tiene puntero al anterior.

Implementacin de TDAS
1) Implementar el TDA Cola Prioridad. El TDA cola prioridad tiene las mismas primitivas que el TDA Cola, excepto que la primitiva ingresar recibe la prioridad del elemento. Recordar que en la cola prioridad puede haber muchos elementos con la misma prioridad, y que cada elemento ingresa como ultimo de su prioridad. Realizar dos implementaciones: a) Usando una lista donde cada elemento contiene una cola. Cada elemento de la lista es una prioridad, y cada prioridad tiene su cola. b) Implementado la prioridad en el nodo de la cola. 2) Implementar el TDA Lista Doblemente Enlazada. Este TDA es similar al TDA Lista Simple, con la diferencia de que el nodo, adems de tener un puntero al siguiente tiene un puntero al anterior. 3) Implementar el TDA Lista Circular. En la lista circular, el siguiente del ultimo elemento de la lista apunta al primero.

1/8

Algoritmos y Programacin II
Ctedra Lic. Gustavo Carolo

Gua de Ejercicios
Listas, Pilas y Colas

4) El TDA Lista Ordenada, es similar a la lista simple, pero cada elemento que se ingresa tiene un campo clave. La primitiva insertar analiza ese campo clave para ingresar el elemento en la posicin correcta. La primitiva insertar ya no recibe el movimiento. Para comparar los elementos existe la funcin ComparaElem(A,B: TElem) que devuelve -1 si A<B, 0 si A=B y 1 si A>B. Implementar este TDA.

5) Una multilista es una lista que posee multiples ordenamientos. Un ejemplo de esto es una
lista que esta ordenada por apellido y tambin por numero de padrn. De esta forma la lista se puede recorrer por numero de padrn o por apellido. La multilista es ordenada desde la implementacin, por lo tanto el elemento debe contener los campos que son clave. Para implementar la multilista va a ser necesario que esta tenga N punteros al primero, uno por cada ordenamiento. Adems cada nodo va a tener N punteros al siguiente. Para poder hacer esto de una forma genrica se puede utilizar un vector para los punteros. Implementar el TDA Multilista. Qu es conveniente, que existan N corrientes o 1 solo corriente?

6) Implementar el TDA FECHA. El TDA Fecha es una estructura que contiene Dia, Mes, Ao,
Hora, Minutos y Segundos. Adems posee primitivas para obtener y modificar cada uno de estos datos. Tambin tiene una primitiva crear que recibe como parmetro una variable del TDA FECHA y los 6 datos correspondientes. Implementar ademas una funcion para comparar dos fechas, la funcin devolver 1 si A<B, 0 si A=B y 1 si A>B.

Ejercicios Varios
Aclaracion: para la resolucion de los ejercicios, utilizar las implementaciones de listas, pilas y colas que fueron implementadas en el apunte de la catedra.

1) Dadas dos listas ordenadas A y B. Realizar procedimientos que devuelvan una lista C tal que: a. C = A U B (sin duplicados) b. C = A + B (con duplicados) c. C = A interseccin B d. C = A B (todos los elementos de A que no estn en B) e. C = (A U B ) (A interseccin B) (todos los elementos de A y de B excepto los que estn en ambas listas) PRE: A y B creadas. C no creada POS: C creada Desarrollar un procedimiento que reciba un vector de N listas ordenadas y devuelva una lista tambin ordenada con los elementos de todas ellas (admite duplicados). {Pre: L[1], L[2]...L[N] creadas y ordenadas. R no creada Pos: R creada, ordenada y contiene todos los elementos de L[1]..L[N].} Procedure MergeNListas( L: Array[1..N] of TLista, Var R: TLista) 2) Repetir el ejercicio anterior pero ahora en el resultado no hay duplicados. En todos los casos, para comparar los elementos usar la funcin ComparaElem(E1,E2) que devuelve 1 si E1<E2, 0 si E1=E2 y 1 si E1>E2. El orden de las listas resultado lo deben asegurar los procedimientos, las listas NO estn ordenadas desde su implementacin.

2/8

Algoritmos y Programacin II
Ctedra Lic. Gustavo Carolo

Gua de Ejercicios
Listas, Pilas y Colas

3) Un banco tiene guardados los registros de los movimientos en una lista. Los movimientos estn ordenados primero por fecha y luego por numero de cuenta. El tipo del elemento de la lista es: TElemLista Fecha (Clave ordenamiento 1) (TDA FECHA) Nro_Cta (Clave ordenamiento 2) Monto Tipo (Deposito/Extraccin) Realizar procedimientos para este TDA que: Permita Calcular la cantidad de depositos realizados entre el 01/01/2004 y el 31/07/2004. Permita Calcular el total depositado y extrado en el ao 2003. Permita Calcular el saldo de la cuenta 8894 del ao 2003. Aclaracin: Cuando las estructuras estn ordenadas por algn campo no se deben recorrer de mas. 4) Una empresa de servicios guarda es una lista las tareas que debe realizar cada empleado. La estructura es la siguiente: TelemLista Cdigo Empleado (Clave ordenamiento) Cantidad de Tareas Cola de Tareas TelemColaTareas Area Solicitante Descripcin Realizar procedimientos para este TDA que: Permita Ingresar una nueva tarea en el empleado que tenga menos tareas. Permita Procesar las tareas de los empleados 15 a 30, sacndolas de la cola. Aclaracin: Cuando las estructuras estn ordenadas por algn campo no se deben recorrer de mas.

5) Un supermercado organiza las cajas con las siguiente estructura: TDA CAJAS: Lista de Cajas Cantidad de Cajas

Lista de Cajas: Numero de Caja (Clave ordenamiento) Recaudacin Clientes atendidos Clientes por atender Cola de Clientes: Nro de Cliente Monto Realizar procedimientos para este TDA que:

3/8

Algoritmos y Programacin II
Ctedra Lic. Gustavo Carolo

Gua de Ejercicios
Listas, Pilas y Colas

Permita Procesar todos los clientes de todas las cajas. Para ello se deber sacar todos los clientes de cada una de las cajas, actualizando el monto recaudado en cada caso. Permita Agregar un cliente en la caja con menor cantidad de clientes por atender.

6) Para el mismo TDA del ejercicio 3, considerar el siguiente cambio Cola de Clientes: Nro de Cliente Lista de Compras: Cdigo de Producto (Clave) Cantidad Lista de Productos (Esta dentro del TDA Cajas): Cdigo de Producto (Clave) Precio Unitario Realizar procedimientos para este TDA que: Para todas las cajas, procesar todos los clientes. El procedimiento deber calcular el monto a abonar por el cliente, obteniendo de lista de compras el producto que compro y el precio del mismo de la Lista de Productos. Por problemas de abastecimiento, solo se podrn los productos entre el cdigo A y el cdigo B. Realizar un procedimiento que procese todos los clientes, considerando solo los productos en el rango A-B.

7) Dado el siguiente TDA: TDA OFICINA: Lista de Empleados Fecha de Trabajo (Clave1) (TDA FECHA) Cdigo de Empleado (Clave2) Cola de Expedientes Nro Expediente Fecha

Pila de Expedientes Nro Expediente Fecha Realizar procedimientos para este TDA que: Permita Ingresar todos los expedientes de la pila, en el empleado que menos trabajo tenga (con menor cantidad de elementos en su cola de expedientes) al momento de ingresar cada expediente para la fecha correspondiente.

4/8

Algoritmos y Programacin II
Ctedra Lic. Gustavo Carolo

Gua de Ejercicios
Listas, Pilas y Colas

Ejercicios de Parcial
1) Un supermercado decidi crear un sistema para poder remarcar sus precios por lo tanto creo un TDA el cual llamaron PRODUCTOS_REMARCADOS. Dicho TDA esta compuesto por: Fecha Actualizacion (Ultima actualizacin de precios) lista de productos: cod_producto (Clave de Ordenamiento) precio cantidad de remarcaciones efectuadas pila de precios anteriores: fecha_actualizacion precio Dada la estructura PRODUCTOS_REMARCADOS se pide: Definir el TDA PRODUCTOS_REMARCADOS y cada uno de los tipo utilizados para el mismo implementadolo con punteros. Desarrollar la primitiva de este TDA llamada productos mas remarcados que recibe como parmetro una variable del TDA PRODUCTOS_REMARCADOS, y devuelve una lista con los productos que fueron remarcados mas de N (parmetro del procedimiento) veces. La lista contendr el cdigo de producto (la lista se mantiene ordenada por este campo), la cantidad de veces que sufri remarcacion y el promedio de los precios anteriores.

Aclaracin: La pila de precios anteriores debe quedar en el mismo estado original. 2) Un Hospital desarrollo un sistema de Turnos, el cual se implemento con un TDA el cual denominaron AGENDAS_MEDICAS. El mismo tiene dos fechas que indican desde cuando y hasta cuando estn programados los turnos para dar, el nombre de la especialidad de esa agenda y una lista_simple. Este TDA AGENDAS MEDICAS posee en cada uno de los elementos de la lista simple (Codigo_medico (la lista esta ordenada por este campo), Fecha de atencin, cantidad_turnos_libres y cantidad_turnos ocupados). Dada el TDA AGENDAS_MEDICAS se pide: Definir el TDA AGENDAS_MEDICAS y cada uno de los tipo utilizados para el mismo implementado con punteros las listas que se requieran. Desarrollar la primitiva de este TDA llamada Verificar_turno que recibe como parmetro el TDA agenda, un codigo de medico y una fecha y devuelve una variable booleana en true si hay disponibilidad de turnos en esa fecha para ese medico.

3) Se decidi implementar el TDA_PADRN_2003 para las prximas votaciones. La estructura de datos del TDA es la siguiente: Fecha de ltima actualizacin: TDA_FECHA (ltima actualizacin del padrn) Lista de provincias: TDA_LISTA_PROVINCIAS. Cada elemento tiene: Provincia (clave de ordenamiento de la lista) Lista de votantes: TDA_LISTA_VOTANTES. Cada elemento tiene:

5/8

Algoritmos y Programacin II
Ctedra Lic. Gustavo Carolo DNI (clave de la lista) Apellido y nombre Cdigo lugar de votacin Mesa votacin

Gua de Ejercicios
Listas, Pilas y Colas

Lista de lugares de votacin: TDA_LISTA_LUGARES. Cada elemento tiene: Cdigo lugar de votacin (clave de la lista) Direccin Localidad

Dado el TDA_PADRN_2003, desarrollar la primitiva llamada Consultar_Lugar_Votacion que recibe como parmetro una variable del TDA_PADRN_2003, una provincia y el DNI de un votante, y devuelve una variable booleana que indica si encontr al votante y un registro con la direccin, localidad y mesa donde votar esa persona. Enunciar pre y post condiciones de la primitiva.

4) Dado el siguiente TDA (LLAMADAS) el cual fue implementado de la siguiente forma Lista de llamadas realizadas. Cada elemento tiene: Numero Telfono (clave de orden.) Lista de llamadas realizadas no valorizadas Fecha de la llamada (clave de ordenamiento 1) Hora de la llamada (clave de ordenamiento 2) Nro. telefono destino Duracin llamada Valor llamada Lista llamadas realizadas valorizadas Telfono destino (clave ordenamiento) Total valorizado de llamadas Total de llamadas realizadas

Dado el TDA_LLAMADAS, desarrollar la primitiva llamada Valorizar llamadas por fecha que recibe como parmetro una variable del TDA_LLAMADAS, un Numero de telfono, y dos fechas (desde y hasta) y valoriza todas las llamadas de ese numero de telfono en ese rango de fechas pasndolas a las lista de llamadas valorizadas y eliminndolas de la lista de llamadas realizadas no valorizadas. La lista de llamadas valorizadas esta agrupada por telfono destino. Devolver una variable con el resultado de la operacin considerando las excepciones que crea necesarias. Enunciar pre y post condiciones de la primitiva y definir los elementos usados.

5) Dada la siguiente primitiva del TDA PILAS la cual fue implementada con punteros verificar si la misma funciona para el tipo mencionado y realizar las correcciones que sean necesarias.

6/8

Algoritmos y Programacin II
Ctedra Lic. Gustavo Carolo PROCEDURE P_SACAR ( P:TIPO_PILA; E:TIPO_ELEM); VAR PAUX: TIPO_PILA; BEGIN PAUX:= P.TOPE; DISPOSE(PAUX); P.TOPE:= PAUX^.ELEM; DISPOSE(PAUX^.SIG); END; 6)

Gua de Ejercicios
Listas, Pilas y Colas

Dada la primitiva COLA_SACAR del TDA COLA, se pide: a. Enunciar sus pre y post condiciones. b. Encontrar los errores en la implementacin de la misma presentada a continuacin.
PROCEDURE COLA_SACAR (VAR C:TIPO_COLA; VAR E:TIPO_ELEM); VAR PAUX: TIPO_COLA; BEGIN PAUX:= C.ULTIMO; DISPOSE(PAUX); C.PRIMERO:= PAUX^.SIGUIENTE; E:= C.PRIMERO^.ELEM; IF (C.PRIMERO = NIL) THEN C.ULTIMO := NIL; END;

7) Dado un TDA COLA desarrollar una nueva primitiva, Cola_adelantar_elemento_N, que recibe como parmetros, la cola, un numero N (es la posicin del elemento que se quiere encolar como primero) y devuelve una variable de error que indica el resultado de la operacin. Esta primitiva desencola el elemento N (por ejemplo si N es 3, es el tercer elemento desde el primero) y lo encola como primero de la cola (quedara listo para salir). La primitiva devuelve error en TRUE si no se pudo realizar la operacin porque no exista el elemento N, FALSE si se realizo exitosamente el cambio. PRE-condicin la cola no esta vaca. Aclaracin: Para que la primitiva sea optima no se pueden utilizar otras primitivas del tipo ni estructuras auxiliares.

Pnodo_cola=^nodo_cola; Nodo_cola=record Elem: tipo_elem; Sig:pnodo_cola; End; COLA = RECORD PRIMERO, ULTIMO: pnodo_cola; END;

7/8

Algoritmos y Programacin II
Ctedra Lic. Gustavo Carolo 8)

Gua de Ejercicios
Listas, Pilas y Colas

Dado el TDA LSC (Lista simple) realizar una nueva primitiva LSC_INVERTIR_LISTA que recibe como parmetro una lista y le invierte el orden a sus elementos, es decir, el ultimo elemento de la lista pasara a ser el primero, el anteltimo el siguiente del que paso a ser primero y el que era primero quedara como ultimo elemento de la lista. PRE-condicin: la lista no esta vaca. Aclaracin: Para que la primitiva sea optima no se pueden utilizar otras primitivas del tipo ni estructuras auxiliares.. Pnodo_lista=^nodo_lista; Nodo_lista=record Elem: tipo_elem; pnodo_lista; Sig: pnodo_lista; End; 9) Dado un TDA PILA desarrollar una nueva primitiva, Pila_Desapilar_elemento_N, que recibe como parmetros, la pila, un numero N (es la posicin del elemento que se quiere desapilar), el elemento a devolver y devuelve una variable de error que indica el resultado de la operacin. Esta primitiva desapila el elemento N (por ejemplo si N es 3, es el tercer elemento desde el tope) y lo devuelve en la variable ELEM. La primitiva devuelve error en TRUE si no se pudo realizar la operacin porque no exista el elemento N, FALSE si se realizo exitosamente el cambio. PRE-condicin: la pila no esta vaca. Aclaracin: Para que la primitiva sea optima no se pueden utilizar otras primitivas del tipo ni estructuras auxiliares.. Pnodo_pila = ^nodo_pila; Nodo_pila = record Elem: tipo_elem; Sig: pnodo_pila; End; 10) Dado un TDA COLA desarrollar una nueva primitiva, Cola_agregar_en_posicin_N, que recibe como parmetros, la cola, un elemento a agregar en la cola y un numero N (es la posicin en la cual se quiere agregar el elemento en la cola). Esta primitiva encola el elemento en la posicin N (por ejemplo si N es 3, se encolara como tercer elemento desde el primero). En caso de que el TDA no tenga N-1 elementos, agregarlo como ultimo (caso comn de agregar cola). PREcondicin: la cola no esta vaca. Aclaracin: Para que la primitiva sea optima no se pueden utilizar otras primitivas del tipo ni estructuras auxiliares.. Pnodo_cola=^nodo_cola; Nodo_cola=record Elem: tipo_elem; pnodo_cola; Sig:pnodo_cola; End; END; COLA = RECORD PRIMERO, ULTIMO: PILA = RECORD TOPE: pnodo_pila; END; END; LSC = RECORD PRIMERO, CORRIENTE:

8/8

Você também pode gostar