UNIV ERSIDAD NACIONAL DE SALTA SEDE REGIONAL ORAN CATEDRA: Algoritmos y Estructuras de Datos (TUP) Año: 2014 Trabaja Práctico N° 5: Contenedores Lineales: Pilas y Colas – Colas de prioridad (3 clases) -------------------------------------------------------------------------------------------------------------------------------------------- PILAS 1) Representar gráficamente la evolución de cada uno de los segmentos de código, en donde P es una pila de caracteres implementada con Array, y las variables x, y, z son caracteres: a) Vaciar(P); Push(‘a’, P); Push(‘b’, P); Push(‘c’, P); Pop(x,P); Pop(y,P); Pop(z,P); b) Vaciar(P); Push(‘a’, P); Push(‘b’, P); Vaciar(P); Push(‘c’, P); Pop(x,P); Push(‘a’,P); Pop(y,P); Push(‘b’,P); Pop(z,P); c) Vaciar(P); Push(‘a’, P); Push(‘b’, P); Push(‘c’, P); Pop(‘x’,P); Pop(‘y’,P); Push(x,P); Pop(‘z’,P); d) Vaciar(P); Push(‘a’,P); Push(‘b’,P); Push(‘c’,P); While not(vacia(P)) do Pop(‘x’,P); 2) Implementar el TAD Pila usando Array en una unidad. Luego escribir un programa que la utilice para verificar si una cadena de caracteres se encuentra bien balanceada en paréntesis. 3) Una cadena C de caracteres que contiene números y operadores y para finalizar la cadena un paréntesis ’ )’, representa una expresión escrita en notación polaca inversa o postfija (el operador se coloca después de los operandos). Escribir un algoritmo que utilizando una pila con Array evalúe la expresión aritmética. 1 UNIV ERSIDAD NACIONAL DE SALTA SEDE REGIONAL ORAN CATEDRA: Algoritmos y Estructuras de Datos (TUP) Año: 2014 Trabaja Práctico N° 5: Contenedores Lineales: Pilas y Colas – Colas de prioridad (3 clases) -------------------------------------------------------------------------------------------------------------------------------------------- Símbolo examinado C(1)=5 C(2)=6 C(3)=2 C(4)=+ C(5)=* C(6)=12 C(7)=4 C(8)=/ C(9)=- C(10)=) Acción Meter(5, Pila) Meter(6, Pila) Meter(2,Pila) Sacar(Op1, Pila) Sacar(Op2, Pila) Computar(Op1,Op2,+,Resultado) Meter(Resultado, Pila) Sacar(Op1, Pila) Sacar(Op2, Pila) Computar(Op1,Op2,*,Resultado) Meter(Resultado, Pila) Meter(12, Pila) Meter(4, Pila) Sacar(Op1, Pila) Sacar(Op2, Pila) Computar(Op1,Op2,/,Resultado) Meter(Resultado, Pila) Sacar(Op1, Pila) Sacar(Op2, Pila) Computar(Op1,Op2,-,Resultado) Meter(Resultado, Pila) Sacar(Resultado, Pila) Mostrar(Resultado) Contenido de la pila 5 6,5 2,6,5 6,5 5 8,5 5 40 12,40 4,12,40 12,40 40 3,40 40 37 - 4) Dada una pila P (implementada mediante Array), invertirla sin usar estructuras auxiliares. 5) Realizar los ejercicios 1, 2 y 3 con el TAD Pila usando Lista Enlazada con asignación dinámica de la memoria. COLAS 6) Implementar el TAD Cola usando Array en una unidad. Luego escribir un programa que la utilice para resolver el siguiente problema: “Dada una cadena de caracteres que contiene dos subcadenas separadas por un punto, se quiere saber si las subcadenas son iguales” - Cadena “xyz.xyz”: Iguales(cadena) devolverá verdadero. - Cadena “xyza.xyz”: Iguales(cadena) devolverá falso. 7) Supongamos que se tiene un bar al paso, el cual dispone de 20 mesas, cada una numerada. Cada persona debe comprar un ticket por los alimentos a consumir. En el momento de la venta se le dará además del ticket, que le servirá para retirar los alimentos de otro mostrador, el número de mesa libre. 2 UNIV ERSIDAD NACIONAL DE SALTA SEDE REGIONAL ORAN CATEDRA: Algoritmos y Estructuras de Datos (TUP) Año: 2014 Trabaja Práctico N° 5: Contenedores Lineales: Pilas y Colas – Colas de prioridad (3 clases) -------------------------------------------------------------------------------------------------------------------------------------------- El sistema funciona así: a) Al iniciar la jornada se tiene en la pila todos los números de mesas (20) que están desocupadas. b) A medida que el cliente ingresa al bar, ingresa a la cola de espera para comprar tickets. El primero de la cola será atendido siempre y cuando exista por lo menos una mesa desocupada. c) Cuando se desocupa una mesa, se agrega a la pila el número de mesa libre. Escribir un algoritmo que permita gestionar el uso de las mesas, simulando la cola de clientes, la pila de números de mesas desocupadas. 8) Dada una cola C (implementada mediante Array) invertirla sin usar estructuras auxiliares 9) Implementar el TAD Cola Circular usando Array en una unidad, redefiniendo las operaciones meter, sacar, vacia, llena, vaciar. Probar el TAD en un programa invocando apropiadamente sus operaciones. 10) Realizar los ejercicios 6 , 7 y 9 utilizando una cola implementada con listas enlazadas. 11) Implementar en una unidad el TAD Cola_Prioridad usando Array, escribir la operación meter para insertar en la cola un elemento con cierta prioridad y la operación sacar que extrae un elemento de la cola (el de mayor prioridad). Probar el TAD en un programa invocando apropiadamente sus operaciones. 12) Implementar en una unidad el TAD Cola_Prioridad usando listas enlazadas, escribir la operación meter para insertar en la cola un elemento con cierta prioridad y la operación sacar que extrae un elemento de la cola (el de mayor prioridad). Probar el TAD en un programa invocando apropiadamente sus operaciones. 3