100442777-pilas-y-colas

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

Upload: jose

Post on 05-Aug-2015

508 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 100442777-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: 100442777-Pilas-y-Colas

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

2 Ejercicios de Pilas y Colas Estructura de Datos

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]);

Meter('(');

System.out.println("");

Page 3: 100442777-Pilas-y-Colas

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

3 Ejercicios de Pilas y Colas Estructura de Datos

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++;

}

}

System.out.println("Datos finales");

for(int k=0;k<topex;k++){

System.out.println(Expo[k]);

}

Page 4: 100442777-Pilas-y-Colas

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

4 Ejercicios de Pilas y Colas Estructura de Datos

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==')'){

Meter(com);

}else if(com=='('){

int j=tope-1;

for(int k=0; k<tope;k++){

System.out.println("Pilita[ "+k+" ] :" +Pila[k]);

}

Page 5: 100442777-Pilas-y-Colas

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

5 Ejercicios de Pilas y Colas Estructura de Datos

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){

int prece=0;

switch (ope){

case '^':

prece=5;

break;

case '*':

prece=4;

break;

Page 6: 100442777-Pilas-y-Colas

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

6 Ejercicios de Pilas y Colas Estructura de Datos

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];

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;

Page 7: 100442777-Pilas-y-Colas

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

7 Ejercicios de Pilas y Colas Estructura de Datos

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]);

}

}

Page 8: 100442777-Pilas-y-Colas

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

8 Ejercicios de Pilas y Colas Estructura de Datos

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 contrario

Examinar s de izquierda a derecha

Si se encuentra caracter de apertura entonces

Meter en pila;

esBalanceado falso;

Fin_si

Si 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 contrario

esBalanceado falso;

Fin_si

Fin_si

Fin_si

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

FIN

Page 9: 100442777-Pilas-y-Colas

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

9 Ejercicios de Pilas y Colas Estructura de Datos

6.- Se tiene la siguiente formula

Escribir 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-/+

Page 10: 100442777-Pilas-y-Colas

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

10 Ejercicios de Pilas y Colas Estructura de Datos

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 10

Dato 11 12 13 14 15 16 17 18 19 20

INICIO

Frente = 1 Tope =10 Sumatoria = 0

Final = 10 Fondo =1 N =10

Mientras (Frente = N) y (Tope > 0) hacer

Si (Frente = 0) y (Tope = 0) entonces

Escribir “Pila Vacía”

Caso Contrario

Sumatoria = Sumatoria + Pila [Tope] * Cola [Frente]

Si (Frente = Final) entonces

Frente = 0

Final = 0

Tope = 0

Caso Contrario

Frente = Frente + 1

Tope = Tope – 1

Fin _ Si

Fin _ Si

Fin _ Mientras

Escribir “La sumatoria es:” + Sumatoria

FIN

PILA 10 10

9 9

8 8

7 7

6 6

5 5

4 4

3 3

2 2

1 1

Índice Dato

Page 11: 100442777-Pilas-y-Colas

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

11 Ejercicios de Pilas y Colas Estructura de Datos

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 contrario

Examinar s de izquierda a derecha

Si se encuentra caracter de apertura entonces

Meter en pila;

esBalanceado falso;

Fin_si

Si 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 contrario

esBalanceado falso;

Fin_si

Fin_si

Fin_si

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

FIN

Page 12: 100442777-Pilas-y-Colas

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

12 Ejercicios de Pilas y Colas Estructura de Datos

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 cliente

Si final = n entonces

Escribir “Cola llena”

Caso contrario

final final + 1

cola[final] cliente

ptr final – frente + 1

si frente = 0 entonces

frente 1

ptr final

fin si

fin si

FIN

//Procedimiento de Atención

INICIO

si No puede ser atendido entonces

Llamar al Procedimiento Reingreso

caso contrario

si frente = 0 entonces

escribir “cola vacia”

caso contrario

cliente cola[frente]

si frente = final entonces

frente 0 , final 0

caso contrario

frente frente + 1

fin-si

Page 13: 100442777-Pilas-y-Colas

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

13 Ejercicios de Pilas y Colas Estructura de Datos

repetir desde i 1 hasta n – 1

cola[i] cola[ i+1]

fin-repetir

frente 1

final final – 1

fin-si

fin-si

FIN

//Procedimiento reingreso

INICIO

tope 0

si final <= 10 entonces

final final + 1

cola [final] cola[frente]

caso contrario

repetir desde j= ptr hasta 10

tope tope + 1

pila[tope] cola[j]

fin_repetir

cola[10] cola [frente]

p tope

repetir desde k=1 hasta tope

cola[10+k] pila[p]

p tope-1

fin_repetir

fin_si

repetir desde i=1 hasta n-1

cola[i] cola[i+1]

fin_repetir

frente 1

final final – 1

FIN

Page 14: 100442777-Pilas-y-Colas

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

14 Ejercicios de Pilas y Colas Estructura de Datos

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.

INICIO

leer pet

si pet = n + 1 entonces

finaliza simulación

caso contrario

si pet es interna entonces

frente i 0, final i 0

leer x

si final i = n entonces

escribir “cola llena :

no hay lugares para peticiones internas”

caso contrario

final i final i + 1

cola[final] x

fin_si

si frente i = 0 entonces

frente i 1

fin_si

llamar a procedimiento cumplir_orden i

caso contarrio

frente e 0,final e 0

leer x

Page 15: 100442777-Pilas-y-Colas

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

15 Ejercicios de Pilas y Colas Estructura de Datos

si final e = n entonces

escribir “cola llena :

no hay lugares para peticiones externas”

caso contrario

final e final + 1

cola[frente] x

fin_si

si frente e = 0 entonces

frente 1

fin_si

llamar a procedimientos cumplir_orden e

fin_si

fin_si

FIN

// Procedimento cumplir_orden i

INICIO

Piso_actual 0

Repetir

Piso_destino cola[frente i]

Hasta que (frente i = 0)

Repetir

Si frente i = final i entonces

Frente i 0

Final i 0

Caso contrario

Frente i frente i + 1

Fin_si

Piso_actual piso_destino

Hasta piso_destino

FIN

Page 16: 100442777-Pilas-y-Colas

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

16 Ejercicios de Pilas y Colas Estructura de Datos

//Procedimiento cumplir_orden e

INICIO

Piso_actual 0

Repetir

Piso_destino cola[frente e]

Hasta que (frente e = 0)

Repetir

Si frente e = final e entonces

Frente e 0

Final e 0

Caso contrario

Frente e frente e + 1

Fin_si

Piso_actual piso_destino

Hasta 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 P

3. sacar de la cola

4. Fin_Mientras

5. Mientras la pila P no sea vacia hacer

6. Escribir la cima de P

7. Desafilar de P

8. Fin_mientras

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

1 2 3 . . . . N

N

3

2

1

Page 17: 100442777-Pilas-y-Colas

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

17 Ejercicios de Pilas y Colas Estructura de Datos

INICIO

Datos iniciales

Frente = -1 ; N

Final = -1 ; Tope = 1

//Algoritmo para meter los caracteres

Si Frente = -1 entonces

Escribir “Cola vacía”

Frente =1

Final =1

Cola [Frente]=carac

Sino

Si Final = N entonces

Escribir “Cola llena”

Sino

Final = Final +1

Fin_Si

Fin_Si

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

Mientras Frente <= Final hacer

Pila [Tope] = Cola [Frente]

Frente = Frente +1

Tope = Tope +1

Fin_Mientras

//Algoritmo para Sacar de Pila un caracter y mostrarlo

Mientras tope <> 0 hacer

Escribir “Pila[Tope]”

Tope = Tope – 1

Si Tope = 0 entonces

Tope = -1

Frente = -1

Final = -1

Fin_Si

Fin_Mientras

FIN

Page 18: 100442777-Pilas-y-Colas

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

18 Ejercicios de Pilas y Colas Estructura de Datos

N = 6

frente final Cola[frente] Cola[final]

-1

1

-1

1

2

3

4

5

6

7

e

x

a

m

e

n

e

x

a

m

e

n

Tope Pila[Tope]

6

5

4

3

2

1

0

n

e

m

a

x

e

La salida es: nemaxe

Final Frente Tope Pila[tope] Cola[frente]

6 1

2

3

4

5

6

7

1

2

3

4

5

6

e

x

a

m

e

n

e

x

a

m

e

n

Page 19: 100442777-Pilas-y-Colas

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

19 Ejercicios de Pilas y Colas Estructura de Datos

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

N ← Cantidad de caracteres

i ← 1, j ← N , Band ← 1

Hacer Mientras (i < j y Band = 1)

Si caracter(i) <> caracter(j) entonces

Band ← 0

Fin_Si

I ← i + 1

J ← j + 1

Fin_Mientras

Si Band = 1 entonces

Escribir “Es Palíndromo”

Sino

Escribir “No es Palíndromo”

Fin_Si

FIN

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

Page 20: 100442777-Pilas-y-Colas

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

20 Ejercicios de Pilas y Colas Estructura de Datos

INICIO

N ← 12

FINAL ← 0

Leer AVION

Si FINAL >= N entonces

Escribir “Estacionamiento lleno”

Sino

FINAL ← FINAL + 1

Fin_Si

FIN

//Algoritmo para la salida de las Aviones

INICIO

Ingrese POSICION de la Avion

Si FINAL <= 0 Entonces

Escribir “No hay Aviones para salir”

Sino

Si POSICION = 1 Entonces

Si FINAL = 1 Entonces

COLA[POSICION] ← Vacio

FINAL ← FINAL -1

Sino

COLA[POSICION] ← Vacio

ARREGLARPOSICION /* Procedimiento

FINAL ← FINAL -1

Fin_Si

Sino

SACAR /* Procedimiento

COLA[POSICION] ← Vacio

LLENAR /* Procedimiento

FINAL ← FINAL – 1

Fin_Si

Fin_Si

FIN

// Fin de salida de Aviones

Page 21: 100442777-Pilas-y-Colas

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

21 Ejercicios de Pilas y Colas Estructura de Datos

PROCEDIMIENTOS ( ):

ARREGLAR POSICION:

i = 1

Mientras i<= FINAL – 1 hacer

COLA[i] ← COLA[i + 1]

COLA[i + 1] ← Vacio

i = i+1

Fin_Mientras

FIN_ARREGLARPOSICION

//Sacar

SACAR

i = 1

Mientras i<= POSICION – 1 hacer

COLAAUX[i] ← COLA[i]

COLA[i] ← Vacio

i = i+1

Fin_Mientras

FIN_SACAR

LLENAR:

i = 1

Mientras i <= POSICION – 1 hacer

COLA[i] ← COLAAUX[i]

i = i+1

Fin_Mientras

COLAAUX ← Vacio

Si FINAL > POSICION entonces

i = 1

Mientras i <= FINAL – 1 hacer

COLA[i] ← COLA[i+1]

COLA[i+1] ← Vacio

Fin_Mientras

Fin_Si

FIN_LLENAR

Page 22: 100442777-Pilas-y-Colas

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

22 Ejercicios de Pilas y Colas Estructura de Datos

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 //Dato

Si Opcion = Derecha entonces

Si FinalD >= N entonces

Escribir “Cola llena”

Sino

FinalD ← FinalD + 1

Cola(FinalD) ← x

Fin_Si

Si FinalD > 0 y Finall <= 0 entonces

Escribir “No se puede insertar”

Sino

Si FinalD <= 0 entonces

Cola(1) ← x

FinalD ← 1

Sino

Si Finall > 1 entonces

Finall ← Finall -1

Cola(Finall) ← x

Sino

Escribir “No se puede insertar”

Fin_Si

Fin_Si

Fin_Si

Fin_Si

FIN

Page 23: 100442777-Pilas-y-Colas

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

23 Ejercicios de Pilas y Colas Estructura de Datos

//Algoritmo Eliminar

INICIO

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

Escribir “Cola Vacia”

FinalD ← 0, Finall ← 1

Sino

Verificar Opcion(Izq/Der)

Si Opcion es Derecha entonces

x ← Cola(FinalD)

FinalD ← FinalD – 1

Sino // Será Opcion Izquierda

x ← Cola(Finall)

Finall ← Finall + 1

Fin_Si

Fin_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

Fin1 ← Fin1 + 1

Fin2 ← Fin2 + 1

Fin3 ← Fin3 + 1

Fin4 ← Fin4 + 1

Page 24: 100442777-Pilas-y-Colas

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

24 Ejercicios de Pilas y Colas Estructura de Datos

Cola1 [Fin1] ← Ap

Cola2 [Fin2] ← Nom

Cola3 [Fin3] ← Dor

Cola4 [Fin4] ← Plat

Fin_Si

FIN

Algoritmo para buscar los tres primeros mayores

INICIO

i ← 1

Mientras (i <=3) hacer

i ← i+1

May = Cola [1]

j ← 1

Mientras k=2 <= Fin4 hacer

Si May < Cola4 [k] Entonces

May ← Cola4 [k]

j ← k

Fin_Si

k ← k + 1

Fin_Mientras

Escribir:

Cola1 [j], Eliminar Cola1 [j]

Cola2 [j], Eliminar Cola2 [j]

Cola3 [j], Eliminar Cola3 [j]

Cola4 [j], Eliminar Cola4 [j]

Fin_Mientras

L = 1

Mientras L <= Fin4 hacer

Si Cola4 [L] <> Vacio Entonces

Escribir :

Cola1 [L]

Cola2 [L]

Cola3 [L]

Cola4 [L]

Fin_Si

L ← L + 1

Fin_Mientras

FIN

Page 25: 100442777-Pilas-y-Colas

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

25 Ejercicios de Pilas y Colas Estructura de Datos

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 500

B: Entre 500 – 800

C: Entre 801 – 1000

D: Entre 1001 – 1350

E: 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,

FIN_D ← 0, FIN_E ← 0

Page 26: 100442777-Pilas-y-Colas

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

26 Ejercicios de Pilas y Colas Estructura de Datos

INICIO

Leer avion (AV), Leer Distancia de destino(DIS)

Si DIS > 0 y DIS < 500 Entonces

FIN_A ← FIN_A + 1

COLA[FIN_A] ← AV

Sino

Si DIS >= 500 y DIS <= 800 Entonces

FIN_B ← FIN_B + 1

COLB[FIN_B] ← AV

Sino

Si DIS >= 801 y DIS<= 1000 Entonces

FIN_C ← FIN_C + 1

COLC[FIN_C] ← AV

Sino

Si DIS >= 1001 y DIS <= 1350 Entonces

FIN_D ← FIN_D + 1

COLD[FIN_D] ← AV

Sino

FIN_E ← FIN_E + 1

COLE[FIN_E] ← AV

Fin_Si

Fin_Si

Fin_Si

Fin_Si

FIN

//Atender al Cliente

Tiempo ← 0

INICIO

Si FRENT_A < FIN_A Entonces

Mostrar ColaA(FRENT_A + 1) // Avion por Salir

Sino

Si FRENT_B < FIN_B Entonces

Mostrar ColaA(FRENT_B + 1)

Sino

Page 27: 100442777-Pilas-y-Colas

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

27 Ejercicios de Pilas y Colas Estructura de Datos

Si FRENT_C < FIN_C Entonces

Mostrar ColaC(FRENT_C + 1)

Sino

Si FRENT_D < FIN_D Entonces

Mostrar ColaD(FRENT_D + 1)

Sino

Si FRENT_E < FIN_E Entonces

Mostrar ColaE(FRENT_E + 1)

Fin_Si

Fin_Si

Fin_Si

Fin_Si

Fin_Si

Repetir hasta que tiempo >= 7

tiempo ← tiempo + 1

Si tiempo >= 6 Entonces // Cada 6 segundos como Ejemplo

Si FIN_A > 0 Entonces

Si FRENT_A < FIN_A Entonces

FRENT_A ← FRENT_A + 1

Cola(FRENT_A) ← vacio

tiempo ← 0

Sino

FRENT_A ← 0

FIN_A ← 0

Fin_Si

Sino

Si FIN_B > 0 Entonces

Si FRENT_B < FIN_B Entonces

FRENT_B ← FRENT_ B + 1

Cola(FRENT_ B) ← vacio

tiempo ← 0

Sino

FRENT_ B ← 0

FIN_ B ← 0

Fin_Si

Sino

Si FIN_C > 0 Entonces

Si FRENT_ C < FIN_ C Entonces

FRENT_ C ← FRENT_ C + 1

Cola(FRENT_ C) ← vacio

Page 28: 100442777-Pilas-y-Colas

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

28 Ejercicios de Pilas y Colas Estructura de Datos

tiempo ← 0

Sino

FRENT_ C ← 0

FIN_ C ← 0

Fin_Si

Sino

Si FIN_D > 0 Entonces

Si FRENT_ D < FIN_ C Entonces

FRENT_ D ← FRENT_ D + 1

Cola(FRENT_ D) ← vacio

tiempo ← 0

Sino

FRENT_ D ← 0

FIN_ D ← 0

Fin_Si

Sino

Si FIN_E > 0 Entonces

Si FRENT_ E < FIN_ C Entonces

FRENT_ E ← FRENT_ E + 1

Cola(FRENT_ E) ← vacio

tiempo ← 0

Sino

FRENT_ E ← 0

FIN_ E ← 0

Fin_Si

Fin_Si

Fin_Si

Fin_Si

Fin_Si

Fin_Si

Fin_Si

Fin_Repetir

Escribir “Cola vacia”

FIN