38
Universidad Nacional del Santa-Ing. de Sistemas e Informática 201 0 1 Ejercicios de Pilas y Colas Estructura de Datos

Pilas y Colas

Embed Size (px)

Citation preview

Page 1: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

1 Ejercicios de Pilas y Colas Estructura de Datos

Page 2: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

PILAS

1.- Codificar el algoritmo de una expresión infija a expresión postfija en la herramienta de programación de laboratorio (java 6.8)package notacionpolaca;import java.io.*;import java.lang.String;

public class PrefijaPosfija { static char Pila[]=new char[60]; static int tope=0; static char sacar='0'; char Exin[]=new char[60]; char Expre[]=new char[60]; char Expo[]=new char[60]; int A, int B; char Bandera= ')'; String cadena=""; int topex=0;

public void PreProfija()throws IOException{ int op,rta=0; BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.println("Elegir Opcion a la que desea transformar" ); System.out.println(" 1. Exp Postfija "); System.out.println(" 2. Exp Prefija "); System.out.println(""); String temp = br.readLine(); op= Integer.parseInt(temp); switch (op){ case 1: System.out.println("Ingresar Expresion Infija:"); cadena= br.readLine(); for(int i=0; i<cadena.length();i++){ Exin[i]=cadena.charAt(i); System.out.println("Exin[ "+(i+1)+" ] : " +Exin[i]); } int N=cadena.length(); Exin[N]=')'; System.out.println("Exin[ n ] : " +Exin[N]);

2 Ejercicios de Pilas y Colas Estructura de Datos

Page 3: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

Meter('('); System.out.println(""); System.out.println("Pila[ "+tope+" ] :" +Pila[tope-1]); System.out.println("");

//Realiza la transformacion de Expresion infija a postfija// for(int i=0;i<=N;i++){ char com=Exin[i]; System.out.println("Compara : " +com); System.out.println(" "+Exin[i]); if(com=='^' | com=='/' | com=='*' | com=='+' | com=='-'){ while(Precedencia(Pila[tope-1])>=Precedencia(com)){ Expo[topex]=Sacar(); topex++; for(int k=0;k<topex;k++){ System.out.println("Expo[ "+ (k+1)+" ] : " +Expo[k]); } } if(Precedencia(Pila[tope-1])<Precedencia(com)){ Meter(com); for(int k=0; k<tope;k++){ System.out.println("Pila[ "+k+" ] :" +Pila[k]); } } }else if(com=='('){ Meter(com); }else if(com==')'){ int j=tope-1; while(Pila[j]!='('){ char aux = Sacar(); System.out.println(aux); Expo[topex] =aux; topex++; j--; } Sacar(); }else{ Expo[topex]=com; topex++; } }

3 Ejercicios de Pilas y Colas Estructura de Datos

Page 4: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

System.out.println("Datos finales"); for(int k=0;k<topex;k++){ System.out.println(Expo[k]); } break; case 2: System.out.println("Ingresar Expresion Infija:"); cadena= br.readLine(); Exin[0]='('; System.out.println("Exin[ 0 ] : " +Exin[0]); for(int i=0; i<cadena.length();i++){ Exin[i+1]=cadena.charAt(i); System.out.println("Exin[ "+(i+1)+" ] : " +Exin[i+1]); } N=cadena.length();

Meter(')'); System.out.println(""); System.out.println("Pila[ "+tope+" ] :" +Pila[tope-1]); System.out.println("");

for(int i=N;i>=0;i--){ char com=Exin[i]; System.out.println("Compara : " +com); System.out.println(" "+Exin[i]);

if(com=='^' | com=='/' | com=='*' | com=='+' | com=='-'){ while(Precedencia(Pila[tope-1])>Precedencia(com)){ Expre[topex]=Sacar(); topex++; for(int k=0;k<topex;k++){ System.out.println("Expre[ "+ (k+1)+" ] : " +Expre[k]); } } if(Precedencia(Pila[tope-1])<=Precedencia(com)){ Meter(com); for(int k=0; k<tope;k++){ System.out.println("Pila[ "+k+" ] :" +Pila[k]); } } }else if(com==')'){

4 Ejercicios de Pilas y Colas Estructura de Datos

Page 5: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

Meter(com); }else if(com=='('){ int j=tope-1; for(int k=0; k<tope;k++){ System.out.println("Pilita[ "+k+" ] :" +Pila[k]); } while(Pila[j]!=')'){ char aux = Sacar(); System.out.println(aux); Expre[topex] =aux; topex++; j--; } Sacar(); }else{ Expre[topex]=com; topex++; } } System.out.println("Datos finales"); for(int k=topex-1;k>=0;k--){ System.out.print(Expre[k]); } break; } }

public static void Meter(char cad){ if(tope<50){ Pila[tope] = cad; tope = tope + 1; } } public static char Sacar(){ if(tope>0){ sacar = Pila[tope-1]; tope = tope -1; } return sacar; } public static int Precedencia(char ope){

5 Ejercicios de Pilas y Colas Estructura de Datos

Page 6: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

int prece=0; switch (ope){ case '^': prece=5; break; case '*': prece=4; break; case '/': prece=4; break; case '+': prece=2; break; case '-': prece=2;

break; } return prece; }}

2.-codificar el algoritmo de evaluación de expresión postfija en la herramienta de programación de laboratorio (java 6.8)package exprposfija;import java.util.*;import java.lang.Math.*;public class EPosfija { Scanner entrada= new Scanner(System.in); String expre, d1=")"; int lon,i=0,j=0; char aux, d[]={')'};

public void RealizarOp(){ System.out.println("Ingresar la Expresion Posfija que desea evaluar:"); expre=entrada.next(); lon=expre.length(); double pila[]=new double[lon];

6 Ejercicios de Pilas y Colas Estructura de Datos

Page 7: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

expre=expre.concat(d1); while(expre.charAt(i)!=d[0]) { aux=expre.charAt(i); switch(aux) { case '+': pila[j-2]=pila[j-2]+pila[j-1]; j--; break; case '-': pila[j-2]=pila[j-2]-pila[j-1]; j--; break; case '*': pila[j-2]=pila[j-2]*pila[j-1]; j--; break; case '/': pila[j-2]=pila[j-2]/pila[j-1]; j--; break; case '^': pila[j-2] = Math.pow(pila[j-2],pila[j-1]); j--; break; default : char aux1[]={aux}; String aux2= new String(aux1); pila[j]=Integer.parseInt(aux2); j++; } i++; } System.out.println("El resultado de la opreacion es:"+" "+pila[j-1]); }}

7 Ejercicios de Pilas y Colas Estructura de Datos

Page 8: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

4.- Dado los caracteres (), [],{}, y una cadena s; s está balanceada si tiene alguno de estos formatos, s=””,(string nulo), s=(T), s={T}, s= TU en donde T y U son cadenas balanceadas (en otras palabras, para cada paréntesis , llave o corchete abierto existe un carácter de cierre correspondiente ). Ejemplo s= {(a + b) [(c - d) ^ 2]}. Escribir el algoritmo (psudocodigo) que use una PILA para ver si una cadena es balanceada.

INICIO

Leer s;esBalanceado verdadero;meter ”!” en pila;

Si s=”” entonces //s es nulo.esBalanceado verdadero;

Caso contrarioExaminar s de izquierda a derechaSi se encuentra caracter de apertura entonces

Meter en pila;esBalanceado falso;

Fin_siSi se encuentra carácter de cerradura entonces

Si carácter es de la misma precedencia que el valor del tope de la pila entonces

Sacar de pila último dato;esBalanceado verdadero;

Caso contrarioesBalanceado falso;

Fin_siFin_si

Fin_siImprimir (s+“ es balanceado: ” esBalanceado);

8 Ejercicios de Pilas y Colas Estructura de Datos

Page 9: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

FIN

6.- Se tiene la siguiente formula

X=a+√b2−c3√d− e

fEscribir su forma infija, prefija y postfija correspondiente

Infija: a+((b^2-c)^(1/2))/(d^(1/3)-e/f)

Prefija: a+((b^2-c)^(1/2))/(d^(1/3)-e/f) a+(([^b2]-c)^[/12])/(d^[/13]-[/ef]) a+([-^b2c]^[/12])/([^d/13]-[/ef]) a+[^-^b2c/12]/[-^d/13/ef] a+[/^-^b2c/12-^d/13/ef] +a/^-^b2c/12-^d/13/ef

Postfija:

a+((b^2-c)^(1/2))/(d^(1/3)-e/f) a+(([b2^]-c)^[12/])/(d^[13/]-[ef/]) a+([ b2^c-]^[12/])/([d13/^]-[ef/]) a+[b2^c-12/^]/[d13/^ef-] a+[ b2^c-12/^ d13/^ef-/] a b2^c-12/^ d13/^ef-/+

9 Ejercicios de Pilas y Colas Estructura de Datos

Page 10: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

7. Se tiene una pila con los 10 números naturales, y una cola con los 10 siguientes, escriba el algoritmo en pseudocódigo que utilizando las operaciones básicas para cada una de estas estructuras permita obtener la sumatoria del producto de sus datos, atendiendo la regla LIFO para la pila y FIFO para la cola.

COLA

Índice 1 2 3 4 5 6 7 8 9 10Dato 11 12 13 14 15 16 17 18 19 20

INICIOFrente = 1 Tope =10 Sumatoria = 0Final = 10 Fondo =1 N =10

Mientras (Frente = N) y (Tope > 0) hacerSi (Frente = 0) y (Tope = 0) entonces

Escribir “Pila Vacía”Caso Contrario

Sumatoria = Sumatoria + Pila [Tope] * Cola [Frente]Si (Frente = Final) entonces

Frente = 0Final = 0Tope = 0

Caso Contrario

10 Ejercicios de Pilas y Colas Estructura de Datos

PILA10 109 98 87 76 65 54 43 32 21 1

Índice

Dato

Page 11: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

Frente = Frente + 1Tope = Tope – 1

Fin _ SiFin _ Si

Fin _ MientrasEscribir “La sumatoria es:” + SumatoriaFIN

8.- Dado los caracteres (), [], {}, y una cadena s; s está balanceada si tiene alguno de estos formatos, s=””,(string nulo), s=(T), s={T}, s= TU en donde T y U son cadenas balanceadas (en otras palabras, para cada paréntesis , llave o corchete abierto existe un carácter de cierre correspondiente ). Ejemplo s = {[(c - d) ^ 2] + 1}. Escribir el algoritmo (psudocodigo) que use una PILA para ver si una cadena es balanceada.

INICIO

Leer s;esBalanceado verdadero;meter ”!” en pila;

Si s=”” entonces //s es nulo.esBalanceado verdadero;

Caso contrarioExaminar s de izquierda a derechaSi se encuentra caracter de apertura entonces

Meter en pila;esBalanceado falso;

Fin_siSi se encuentra carácter de cerradura entonces

Si carácter es de la misma precedencia que el valor del tope de la pila entonces

Sacar de pila último dato;esBalanceado verdadero;

11 Ejercicios de Pilas y Colas Estructura de Datos

Page 12: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

Caso contrarioesBalanceado falso;

Fin_siFin_si

Fin_siImprimir (s+“ es balanceado: ” esBalanceado);

FIN

COLAS

1. Se considera una cola frente a una ventanilla en la cual si un cliente al llegar a la misma no puede ser atendido, se le reintegra a la cola a la posición nº 10, si hay más de 10 personas, o al final de la misma, en caso contrario. Se pide diseñar un procedimiento de ATENCION (lo que debe suceder cuando un cliente es atendido), REINGRESO (vuelta a la cola) y otro de INGRESO (inicial) en cola. Todo ello con vistas a que el reingreso sea sencillo, para lo que se sugiere controlar el nº de personas en la cola, y en su caso, un puntero al elemento adecuado de la cola para ejecutar el reingreso.

//Procedimiento de ingreso

INICIO Frente 0, final 0;Leer clienteSi final = n entonces

Escribir “Cola llena”Caso contrario

final final + 1cola[final] clienteptr final – frente + 1

12 Ejercicios de Pilas y Colas Estructura de Datos

Page 13: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

si frente = 0 entoncesfrente 1ptr final

fin sifin si

FIN

//Procedimiento de AtenciónINICIO

si No puede ser atendido entoncesLlamar al Procedimiento Reingreso

caso contrariosi frente = 0 entonces

escribir “cola vacia”caso contrario

cliente cola[frente]si frente = final entonces

frente 0 , final 0caso contrario

frente frente + 1fin-sirepetir desde i 1 hasta n – 1

cola[i] cola[ i+1] fin-repetirfrente 1final final – 1

fin-sifin-si

FIN

//Procedimiento reingreso

INICIOtope 0si final <= 10entoncesfinal final + 1cola [final] cola[frente]caso contrario

repetir desde j= ptr hasta 10tope tope + 1

13 Ejercicios de Pilas y Colas Estructura de Datos

Page 14: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

pila[tope] cola[j]fin_repetircola[10] cola [frente]p toperepetir desde k=1 hasta tope

cola[10+k] pila[p]p tope-1

fin_repetirfin_sirepetir desde i=1 hasta n-1

cola[i] cola[i+1]fin_repetir

frente 1final final – 1

FIN

2. Un ascensor está situado en un edificio de N plantas (la planta baja es la 0) y responde a dos tipos de peticiones de funcionamiento: las de los usuarios que están dentro del ascensor (peticiones internas) y las de lo están fuera (peticiones externas). Estas últimas solo serán atendidas cuando no haya peticiones internas. Los dos tipos de peticiones se gestionan independientemente y responden a criterios de temporalidad, de manera que las llamadas van siendo atendidas según el orden de solicitud. Con este planteamiento, hay que escribir un programa que simule el funcionamiento del ascensor de forma que las peticiones se realicen mediante pulsaciones de teclado y, “al mismo tiempo”, mover el ascensor a los pisos que se van solicitando. Se distinguirá entre peticiones interiores y exteriores según las teclas pulsadas (teclas: 0, 1, 2, … N, indican peticiones interiores a dichos pisos; teclas: -0, -1, -2, …, -N, indican peticiones exteriores en el mismo orden), la tecla ‘N+1’ se reserva para finalizar la simulación. La visualización del proceso se puede realizar utilizando un método MOVER _ ASCENSOR que muestra por pantalla el movimiento del ascensor. Este método responde al siguiente perfil: MOVER _ ASCENSOR (desde, hasta: 0…N); donde desde indica la posición actual del ascensor y hasta, el piso al que debe ir.

14 Ejercicios de Pilas y Colas Estructura de Datos

Page 15: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

INICIO leer petsi pet = n + 1 entonces

finaliza simulación caso contrario

si pet es interna entoncesfrente i 0, final i 0leer xsi final i = n entonces

escribir “cola llena : no hay lugares para peticiones internas”

caso contrariofinal i final i + 1cola[final] x

fin_sisi frente i = 0 entonces

frente i 1fin_sillamar a procedimiento cumplir_orden i

caso contarriofrente e 0,final e 0leer xsi final e = n entonces

escribir “cola llena : no hay lugares para peticiones externas”

caso contrariofinal e final + 1cola[frente] x

fin_sisi frente e = 0 entonces

frente 1fin_sillamar a procedimientos cumplir_orden e

fin_sifin_si

FIN

15 Ejercicios de Pilas y Colas Estructura de Datos

Page 16: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

// Procedimento cumplir_orden i

INICIOPiso_actual 0Repetir

Piso_destino cola[frente i]Hasta que (frente i = 0)RepetirSi frente i = final i entonces

Frente i 0Final i 0

Caso contrarioFrente i frente i + 1

Fin_siPiso_actual piso_destino

Hasta piso_destinoFIN

//Procedimiento cumplir_orden e

INICIOPiso_actual 0Repetir

Piso_destino cola[frente e]Hasta que (frente e = 0)RepetirSi frente e = final e entonces

Frente e 0Final e 0

Caso contrarioFrente e frente e + 1

Fin_si

16 Ejercicios de Pilas y Colas Estructura de Datos

Page 17: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

Piso_actual piso_destinoHasta piso_destino

FIN

3. Considera que palabra es una palabra de tipo Cola que contiene la entrada del usuario por teclado, P una pila de caracteres y el siguiente algoritmo:

1. Mientras haya mas caracteres en palabra hacer 2. apilar el primero de la cola en la pila P3. sacar de la cola4. Fin_Mientras5. Mientras la pila P no sea vacia hacer 6. Escribir la cima de P7. Desafilar de P8. Fin_mientras

¿Cuál es la salida para la entrada “examen”?

INICIO Datos iniciales

Frente = -1 ; N Final = -1 ; Tope = 1

//Algoritmo para meter los caracteres

Si Frente = -1 entoncesEscribir “Cola vacía”Frente =1

17 Ejercicios de Pilas y Colas Estructura de Datos

1 2 3 . . . . N

N

3

2

1

Page 18: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

Final =1 Cola [Frente]=carac

SinoSi Final = N entonces

Escribir “Cola llena”Sino

Final = Final +1Fin_Si

Fin_Si

// Algoritmo para Sacar un caracter de Cola y ponerlo en Pila

Mientras Frente <= Final hacerPila [Tope] = Cola [Frente]Frente = Frente +1Tope = Tope +1

Fin_Mientras

//Algoritmo para Sacar de Pila un caracter y mostrarlo

Mientras tope <> 0 hacerEscribir “Pila[Tope]”Tope = Tope – 1Si Tope = 0 entonces

Tope = -1Frente = -1Final = -1

Fin_SiFin_Mientras

FIN N = 6

frente

final Cola[frente] Cola[final]

-11

-112345

exame

exame

18 Ejercicios de Pilas y Colas Estructura de Datos

Page 19: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

67

n n

Tope

Pila[Tope]

6543210

nemaxe

La salida es: nemaxe

4. Escribe el algoritmo en pseudocódigo que lea una cadena de caracteres del teclado y decida si es palíndromo, es decir, si se lee igual de izquierda a derecha que de derecha a izquierda. Impleméntalo después en el Lenguaje de programación de su dominio. Ejemplo: daba le arroz a la zorra en el abad es palíndromo.

INICIO

19 Ejercicios de Pilas y Colas Estructura de Datos

Final Frente Tope Pila[tope]

Cola[frente]

6 1234567

123456

examen

examen

Page 20: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

N ← Cantidad de caracteresi ← 1, j ← N , Band ← 1

Hacer Mientras (i < j y Band = 1)Si caracter(i) <> caracter(j) entonces

Band ← 0Fin_SiI ← i + 1J ← j + 1

Fin_Mientras

Si Band = 1 entoncesEscribir “Es Palíndromo”

SinoEscribir “No es Palíndromo”

Fin_SiFIN

5. Un estacionamiento de las avionetas de un aeródromo es en línea, con una capacidad hasta 12 avionetas. Las avionetas llegan por el extremo izquierdo y salen por el extremo derecho. Cuando llega un piloto a recoger su avioneta, si ésta no esta justamente en el extremo de salida (derecho), todas las avionetas a su derecha han de ser retiradas, sacar la suya y las retiradas colocadas de nuevo en el mismo orden relativo en que estaban. La salida de una avioneta supone que las demás se mueven hacia delante, de tal forma que lo espacios libres del estacionamiento estén por la parte izquierda. Escribia el algoritmo (Pseudocódigo) para emular este estacionamiento tiene como entrada un carácter que indica una acción sobre la avioneta, y la matricula de la avioneta. La acción pude ser, llegada (E) o salida (S) de avioneta, En la llegada puede ocurrir que el estacionamiento este lleno, si es así la avioneta espera hasta que quede una plaza libre, o hasta que se dé la orden de retirada (salida).Algoritmo para llegada de Aviones

INICION ← 12FINAL ← 0Leer AVION

Si FINAL >= N entonces

20 Ejercicios de Pilas y Colas Estructura de Datos

Page 21: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

Escribir “Estacionamiento lleno”Sino

FINAL ← FINAL + 1Fin_Si

FIN

//Algoritmo para la salida de las Aviones

INICIOIngrese POSICION de la AvionSi FINAL <= 0 Entonces

Escribir “No hay Aviones para salir”Sino

Si POSICION = 1 EntoncesSi FINAL = 1 Entonces

COLA[POSICION] ← VacioFINAL ← FINAL -1

SinoCOLA[POSICION] ← VacioARREGLARPOSICION /* ProcedimientoFINAL ← FINAL -1

Fin_SiSino

SACAR /* ProcedimientoCOLA[POSICION] ← VacioLLENAR /* ProcedimientoFINAL ← FINAL – 1

Fin_SiFin_Si

FIN // Fin de salida de Aviones

PROCEDIMIENTOS ( ):

ARREGLAR POSICION:

21 Ejercicios de Pilas y Colas Estructura de Datos

Page 22: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

i = 1Mientras i<= FINAL – 1 hacer

COLA[i] ← COLA[i + 1]COLA[i + 1] ← Vacio i = i+1

Fin_MientrasFIN_ARREGLARPOSICION

//SacarSACAR

i = 1Mientras i<= POSICION – 1 hacer

COLAAUX[i] ← COLA[i]COLA[i] ← Vacioi = i+1

Fin_MientrasFIN_SACAR

LLENAR:

i = 1Mientras i <= POSICION – 1 hacer

COLA[i] ← COLAAUX[i]i = i+1

Fin_MientrasCOLAAUX ← VacioSi FINAL > POSICION entonces

i = 1Mientras i <= FINAL – 1 hacer

COLA[i] ← COLA[i+1]COLA[i+1] ← Vacio

Fin_MientrasFin_Si

FIN_LLENAR

22 Ejercicios de Pilas y Colas Estructura de Datos

Page 23: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

6. Elabore el pseudocódigo de las operaciones METER Y SACAR de una bicola, donde la cola de un extremo guarda códigos de Radios y la del otro extremo códigos de televisores.

//Algoritmo Insertar

FinalD ← 0 Finall ← 1

INICIO:

Verificar Opcion: Leer x //DatoSi Opcion = Derecha entonces

Si FinalD >= N entonces Escribir “Cola llena”

SinoFinalD ← FinalD + 1Cola(FinalD) ← x

Fin_SiSi FinalD > 0 y Finall <= 0 entonces

Escribir “No se puede insertar”Sino

Si FinalD <= 0 entonces Cola(1) ← xFinalD ← 1

SinoSi Finall > 1 entonces

Finall ← Finall -1Cola(Finall) ← x

SinoEscribir “No se puede insertar”

Fin_SiFin_Si

Fin_SiFin_Si

FIN

23 Ejercicios de Pilas y Colas Estructura de Datos

Page 24: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

//Algoritmo Eliminar

INICIOSi Finall > FinalD ó FinalD <= 0 ó Finall >= 0 entonces

Escribir “Cola Vacia”FinalD ← 0, Finall ← 1

SinoVerificar Opcion(Izq/Der)Si Opcion es Derecha entonces

x ← Cola(FinalD)FinalD ← FinalD – 1

Sino // Será Opcion Izquierdax ← Cola(Finall)Finall ← Finall + 1

Fin_SiFin_Si

FIN

7. En un archivo de texto se encuentran los resultados de una competición de tiro al plato, de tal forma que en cada línea se encuentra Apellido, Nombre, número de dorsal y número de platos rotos. Se debe escribir el algoritmo (Pseudocódigo), que lea el archivo de la competición y determine los tres primeros. La salida ha de ser los tres ganadores y a continuación los concursantes en el orden en que aparecen en el archivo (utilizar la estructura cola).

//Algoritmo Para Insertar Datos

Fin1 = Fin2 = Fin3 = Fin4 = 0

INICIO

Ingrese Datos [Apellidos (Ap), Nombre (Nom), Numero de dorsal (Dor), Platos rotos (Plat)]

Ingrese numero de Datos (N>3)Si Fin4 >= N entonces

Escribir “Cola llena”Sino

24 Ejercicios de Pilas y Colas Estructura de Datos

Page 25: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

Fin1 ← Fin1 + 1Fin2 ← Fin2 + 1Fin3 ← Fin3 + 1Fin4 ← Fin4 + 1Cola1 [Fin1] ← ApCola2 [Fin2] ← NomCola3 [Fin3] ← DorCola4 [Fin4] ← Plat

Fin_SiFINAlgoritmo para buscar los tres primeros mayores

INICIO

i ← 1Mientras (i <=3) hacer

i ← i+1May = Cola [1]j ← 1Mientras k=2 <= Fin4 hacer

Si May < Cola4 [k] EntoncesMay ← Cola4 [k]j ← k

Fin_Sik ← k + 1

Fin_MientrasEscribir:Cola1 [j], Eliminar Cola1 [j]Cola2 [j], Eliminar Cola2 [j]Cola3 [j], Eliminar Cola3 [j]Cola4 [j], Eliminar Cola4 [j]

Fin_Mientras

L = 1Mientras L <= Fin4 hacer

Si Cola4 [L] <> Vacio EntoncesEscribir :Cola1 [L]Cola2 [L]Cola3 [L]

25 Ejercicios de Pilas y Colas Estructura de Datos

Page 26: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

Cola4 [L]Fin_SiL ← L + 1

Fin_MientrasFIN

8. El despegue de aeronaves en un aeropuerto se realiza siguiendo el orden establecido por una cola de prioridades. Hay 5 prioridades establecidas según el destino de aeronave. Destino de menos de 500 km tienen la máxima prioridad, prioridad 1, entre 500 y 800 km prioridad 2, entre 801 y 1000 km prioridad 3, entre 1001 y 1350 km prioridad 4 y para mayores distancias prioridad 5. Cuando una aeronave recibe cierta señal se coloca en la cola que le corresponde y empieza a contar el tiempo de espera. Los despegues se realizan cada 6 minutos según el orden establecido en las distintas colas de prioridad. El piloto de una aeronave puede pasar el aviso a control de que tiene un problema, y no puede despegar por lo que pasa al final de la cola y se da la orden de despegue a la siguiente aeronave. Puede darse la circunstancia de que una aeronave lleve mas de 20 minutos esperando, en ese caso pasará a formar parte de la siguiente cola de prioridad y su tiempo de espera se inicializa a cero.Escribir el algoritmo que simule este sistema de colas mediante una lista única, cada vez que despegue un avión saldrá un mensaje con las características del vuelo y el tiempo total de espera.

Prioridad A, B, C, D, E

Distancia de viaje (Km):

A: Menor de 500B: Entre 500 – 800C: Entre 801 – 1000D: Entre 1001 – 1350E: Mayor de 1350

LLENAR COLAS

FRENT_A ← 0, FRENT_B ← 0, FRENT_C ← 0, FRENT_D ← 0, FRENT_E ← 0

FIN_A ← 0, FIN_B ← 0, FIN_C ← 0,

26 Ejercicios de Pilas y Colas Estructura de Datos

Page 27: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

FIN_D ← 0, FIN_E ← 0

INICIO

Leer avion (AV), Leer Distancia de destino(DIS)Si DIS > 0 y DIS < 500 Entonces

FIN_A ← FIN_A + 1COLA[FIN_A] ← AV

SinoSi DIS >= 500 y DIS <= 800 Entonces

FIN_B ← FIN_B + 1COLB[FIN_B] ← AV

SinoSi DIS >= 801 y DIS<= 1000 Entonces

FIN_C ← FIN_C + 1 COLC[FIN_C] ← AV

SinoSi DIS >= 1001 y DIS <= 1350 Entonces

FIN_D ← FIN_D + 1COLD[FIN_D] ← AV

SinoFIN_E ← FIN_E + 1COLE[FIN_E] ← AV

Fin_SiFin_Si

Fin_SiFin_Si

FIN

//Atender al Cliente

27 Ejercicios de Pilas y Colas Estructura de Datos

Page 28: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

Tiempo ← 0

INICIO

Si FRENT_A < FIN_A Entonces Mostrar ColaA(FRENT_A + 1) // Avion por Salir

SinoSi FRENT_B < FIN_B Entonces

Mostrar ColaA(FRENT_B + 1)Sino

Si FRENT_C < FIN_C EntoncesMostrar ColaC(FRENT_C + 1)

SinoSi FRENT_D < FIN_D Entonces

Mostrar ColaD(FRENT_D + 1)Sino

Si FRENT_E < FIN_E EntoncesMostrar ColaE(FRENT_E + 1)

Fin_SiFin_Si

Fin_SiFin_Si

Fin_Si

Repetir hasta que tiempo >= 7tiempo ← tiempo + 1

Si tiempo >= 6 Entonces // Cada 6 segundos como EjemploSi FIN_A > 0 Entonces

Si FRENT_A < FIN_A Entonces FRENT_A ← FRENT_A + 1

Cola(FRENT_A) ← vaciotiempo ← 0

Sino FRENT_A ← 0

FIN_A ← 0Fin_Si

Sino Si FIN_B > 0 Entonces

Si FRENT_B < FIN_B Entonces

28 Ejercicios de Pilas y Colas Estructura de Datos

Page 29: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

FRENT_B ← FRENT_ B + 1 Cola(FRENT_ B) ← vacio

tiempo ← 0Sino FRENT_ B ← 0

FIN_ B ← 0Fin_Si

SinoSi FIN_C > 0 Entonces

Si FRENT_ C < FIN_ C Entonces FRENT_ C ← FRENT_ C + 1

Cola(FRENT_ C) ← vaciotiempo ← 0

Sino FRENT_ C ← 0

FIN_ C ← 0Fin_Si

Sino Si FIN_D > 0 Entonces

Si FRENT_ D < FIN_ C Entonces FRENT_ D ← FRENT_ D + 1

Cola(FRENT_ D) ← vaciotiempo ← 0

Sino FRENT_ D ← 0

FIN_ D ← 0Fin_Si

SinoSi FIN_E > 0 Entonces

Si FRENT_ E < FIN_ C Entonces FRENT_ E ← FRENT_ E + 1

Cola(FRENT_ E) ← vaciotiempo ← 0

Sino FRENT_ E ← 0

FIN_ E ← 0Fin_Si

Fin_Si Fin_SiFin_Si

Fin_Si

29 Ejercicios de Pilas y Colas Estructura de Datos

Page 30: Pilas y Colas

Universidad Nacional del Santa-Ing. de Sistemas e Informática 2010

Fin_SiFin_Si

Fin_Repetir

Escribir “Cola vacia”FIN

30 Ejercicios de Pilas y Colas Estructura de Datos