Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Estructura de Datos Semana 10
Estructura de Datos Semana 10
4.- Dados los caracteres (), {}, [], y una cadena s, a esta balanceada si tiene alguno de estos
formatos, s = “ ”, ( String nulo); s = (T); s = [T]; s = {T}; s = UT 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
(Pseudocódigo) que use una PILA para ver si una cadena es balanceada.
PSEUDOCODIGO:
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
CODIGO JAVA:
class Nodo {
char simbolo;
Nodo sig;
} private Nodo raiz;
Pila () {
raiz=null;
}
Nodo nuevo;
nuevo = new Nodo();
nuevo.simbolo = x;
if (raiz==null)
{ nuevo.sig = null;
raiz = nuevo;
} else {
nuevo.sig = raiz;
raiz = nuevo;
}
}
if (raiz!=null)
{
char informacion = raiz.simbolo;
raiz = raiz.sig;
return informacion;
}else{
return Character.MAX_VALUE;
}
}
if (raiz==null) {
return true;
} else {
return false;
}
}
}
Pila pila1;
pila1 = new Pila ();
String cadena=tf1.getText();
for (int f = 0 ; f < cadena.length() ; f++)
{
if (cadena.charAt(f) == '(' || cadena.charAt(f) == '[' || cadena.charAt(f) == '{') {
pila1.insertar(cadena.charAt(f));
} else {
if (cadena.charAt(f)==')') {
if (pila1.extraer()!='(') {
return false;
}
} else {
if (cadena.charAt(f)==']') {
if (pila1.extraer()!='[') {
return false;
}
System.out.println(“ESTA BALANCEADA”)
} else {
if (cadena.charAt(f)=='}') {
if (pila1.extraer()!='{') {
return false;
System.out.println(“NO ESTA BALANCEADA”)
} } } } } }
if (pila1.vacia()) {
return true;
} else {
return false;
}
}
7. Se tiene una pila con los 10 primeros números naturales, y una cola con 10 siguientes,
escriba el algoritmo en Pseudocódigo que utilizando las operaciones básicas para una de estas
estructuras permite obtener la sumatoria del producto de sus datos, atendiendo la regla LIFO
para la pila y FIFO para la cola.
COLA: PILA:
Indice 1 2 3 4 5 6 7 8 9 10
Dato 1 12 13 14 15 16 17 18 19 20
10 10
INICIO
9 9
Frente = 1 Tope =10 Sumatoria = 0
Final = 10 N =10 8 8
Mientras (Frente > 0) y (Tope > 0) hacer
Si (Frente = 0) y (Tope = 0) entonces 7 7
Escribir “Pila Vacía”
Caso Contrario 6 6
Sumatoria = Sumatoria + Pila [Tope] * Cola [Frente]
Si (Frente = Final) entonces 5 5
Frente = 0
Final = 0 4 4
Tope = 0
Caso Contrario 3 3
Frente = Frente + 1
Tope = Tope – 1 2 2
Fin _ Si
Fin _ Si 1 1
Fin _ Mientras
Escribir “La sumatoria es:” + Sumatoria Indice Dato
FIN
PRUEBA DE ESCRITORIO:
CODIGO JAVA:
package Semana8;
import java.util.Scanner;
System.out.print("Pila:");
for(int i=0;i<n;i++){
System.out.print(Pila[i]+" ");
}
System.out.println();
}
public void mostrarCola(){
System.out.print("Cola:");
for(int i=0;i<n;i++){
System.out.print(Cola[i]+" ");
}
System.out.println();
suma=suma+Pila[tope]*Cola[frente];
if(frente==fin){
frente=-1;
fin=-1;
tope=-1;
}else{
frente=frente+1;
tope=tope-1;
}
}
System.out.println("La sumatoria del producto es:"+" "+suma);
}
op.sumatori();
}
}
SEMANA 10:
PSEUDOCODIGO:
INICIO
Leer petición
SI petición = n + 1 entonces
finaliza simulación
caso contrario
SI petición es interna entonces
frenteinterna =0, finalinterna = 0
Leer x
SI finalinterna = n entonces
Escribir “cola llena: no hay lugares para peticiones internas”
caso contrario
finalinterna = finalinterna + 1
cola[final]= x
fin_si
SI frenteinterna = 0 entonces
frenteinterna = 1
fin_si
llamar a procedimiento cumplir_orden interna
caso contarrio
frenteexterno= 0, finalexterno= 0
leer x
SI finalexterna = n entonces
escribir “cola llena : no hay lugares para peticiones
externas”
caso contrario
finalexterna= final + 1
cola[frente]= x
fin_si
SI frenteexterna = 0 entonces
frente= 1
fin_si
llamar a procedimientos cumplir_orden externo
fin_si
fin_si
FIN
INICIO
Piso_actual =0
Repetir Piso_destino cola[frenteinterna] Hasta que (frenteinterna = 0)
Repetir
Si frenteinterna = finalinterna entonces
Frenteinterna= 0
Finalinterna= 0
Caso contrario
Frenteinterna= frenteinterna + 1
Fin_si
Piso_actual piso_destino
Hasta piso_destino
FIN
INICIO
Piso_actual= 0
Repetir Piso_destino cola[frenteexterna] Hasta que (frenteexterna = 0)
Repetir
Si frenteexterna = finalexterna entonces
Frenteexterna= 0
Finalexterna= 0
Caso contrario
Frenteexterna= frenteexterna + 1
Fin_si
Piso_actual piso_destino
Hasta piso_destino
FIN
CODIGO JAVA:
package ascensor;
public class Ascensor {
int interna[]={4,6,8,10,17}; int frenteinterna=0;
int finalinterna=interna.length-1;
int externa[]={-6,-3,-1}; int frenteexterna=0;
int finalexterna=externa.length-1;
int n=15; int piso[]=new int[10];int p=0;
package ascensor;
Inicio
PRUEBA DE ESCRITORIO:
CODIGO JAVA:
package Semana10;
int frente=0;
int fin=5;
int n=6;
String Cola[]={"e","x","a","m","e","n"};
int tope=-1;
while(frente<=fin){
tope=tope+1;
Pila[tope]=Cola[frente];
if(frente==fin){
System.out.println("cola vacia");
frente=frente+1;
System.out.print("SALIDA:");
while(tope>-1){
System.out.print(Pila[tope]+" ");
tope=tope-1;
if(tope==-1){
System.out.println();
System.out.println("pila vacia");
}} System.out.println();
}
public static void main(String[] args) {
op.sacar();
op.sacarPila();
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.
PSEUDOCODIGO:
Inicio
Tope 0; frente2 0;
Frente 1 1; final 2 0;
Final 1 n; final 2 0;
Leer Cola1;
Mientras Frente1 < = Final1
Tope tope + 1
Pila [tope] cola1 [frente 1];
Final 2 final 2 + 1;
Cola2 [final2] cola1 [frente 1];
Si frente 2 = 0 entonces
Frente 2 1;
Fin_si
Frente 1 frente 1 + 1
Fin_Mientras
Mientras tope > 0 hacer
Si pila [tope] <> cola 2 [frente 2] entonces
Band 1; salir;
Fin_si
Tope tope – 1
Frente 2 frente 2 + 1
Fin_Mientras
Si band = 1 entonces
Escribir “no es palíndromo”
Caso contrario
Escribir “si es palíndromo”
Fin_si
Fin
CODIGO:
int i =0;tam=x.length();
while (i<=x.length()-1){
Final++;
cola[Final]=x.charAt(i);
if(frente==-1){
frente=0;
}
i++;
}
}
while (frente<=Final){
tope++;
pila[tope]=cola[frente];
if(frente==Final){
}
frente++;
}
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. Escribía 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).
PSEUDOCODIGO:
PROCEDIMIENTOS [ ]:
ARREGLARPOSICION:
i=1
Mientras i<= FINAL – 1 hacer
COLA[i] ← COLA[i + 1]
COLA[i + 1] ← Vacio
i = i+1
Fin_Mientras
FIN_ARREGLARPOSICION
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
CODIGO:
package EJERCICIO5;
import java.util.Scanner;
package EJERCICIO5;
public class IMPLEMENTACION extends DATOS{
System.out.println("ingrese la matricula");
matricula = t.next();
System.out.println("ingrese el modelo");
modelo = t.next();
}
if (fin == 11) {
System.out.println("El Aerodromo esta lleno,pasara a la lista de espera");
Efin++;
Ematricula[Efin] = matricula;
Emodelo[Efin] = modelo;
System.out.println(Ematricula[Efin] + "\t" + Emodelo[Efin] + "\n");
if (Efrente == -1) {
Efrente = 0;
}
} else {
fin++;
Cola[fin] = matricula;
Cola1[fin] = modelo;
if (frente == -1) {
frente = 0;
}
}
if (frente == -1) {
System.out.println("El Aerodromo se encuentra vacio ");
} else {
for (int i = 0; i <= fin; i++) {
if (buscar.compareTo(Cola[i]) == 0) {
pos = i;
sw = 1;
System.out.println("Matricula : " + Cola[pos] + "\n" + "Modelo : " + Cola1[pos]
+ "\n Avioneta despegando.... ");
System.out.println("Feliz Viaje....!!");
}
}
if (sw == 0) {
System.out.println("La Matricula Ingresada no esta Registrado");
} else {
if (pos == frente) {
for (int i = 0; i <= fin; i++) {
Cola[i] = Cola[i + 1];
Cola1[i] = Cola1[i + 1];
}
} else {
for (int i = pos; i <= fin; i++) {
Cola[i] = Cola[i + 1];
Cola1[i] = Cola1[i + 1];
}
}
fin--;
}
}
}
package EJERCICIO5;
import java.util.Scanner;
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).
PSEUDOCODIGO:
CODIGO JAVA:
package EJERCICIO7;
import java.util.Scanner;
public class LLAMAMIENTO {
package EJERCICIO7;
System.out.println("==============================================
==========\n");
int i = 0;
while (frente <= fin) {
System.out.println("" + (i + 1) + "º \t" + Nombre[frente] + "\t" + Apellido[frente]
+ "\t" + Dorsal[frente] + "\t" + Plato[frente] + "\n");
frente++;
i++;
}
}
}
System.out.println("==============================================
=========\n");
for (int i = 0; i < 3; i++) {
mayor = Plato[i];
for (int k = i + 1; k <= fin; k++) {
if (mayor < Plato[k]) {
mayor = Plato[k];
j = k;
}
}
System.out.println("" + (i + 1) + "º \t" + Nombre[j] + "\t" + Apellido[j] + "\t" +
Dorsal[j] + "\t" + Plato[j] + "\n");
int aux = Plato[j];
Plato[j] = Plato[i];
Plato[i] = aux;
}
}
}
}
package EJERCICIO7;
import java.util.Scanner;
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
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
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
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
CODIGO JAVA:
package EJERCICIO8;
import java.util.Scanner;
int n = 3;
String colaA[] = new String[n];
String colaB[] = new String[n];
String colaC[] = new String[n];
String colaD[] = new String[n];
String colaE[] = new String[n];
int frenteA = -1, frenteB = -1, frenteC = -1, frenteD = -1, frenteE = -1;
int finA = -1, finB = -1, finC = -1, finD = -1, finE = -1, dis;
int tiempo = -1;
String av;
Scanner t = new Scanner(System.in);
} else {
if (dis >= 801 && dis <= 1000) {
finC = finC + 1;
colaC[finC] = av;
System.out.println("");
System.out.println(" La distancia es: " + dis);
} else {
if (dis >= 1001 && dis <= 1350) {
finD = finD + 1;
colaD[finD] = av;
System.out.println("");
System.out.println(" La distancia es: " + dis);
} else {
finE = finE + 1;
colaE[finE] = av;
System.out.println("");
System.out.println(" La distancia es: " + dis);
}
}
}
}
}
}
}
System.out.println("Cola vacia ");
}
op.llenarCola();
op.mostrar();
break;
case 2:
op.atenderCliente();
op.mostrar();
break;
case 3:
System.exit(0);
break;
}
} while (Opcion != 3);
}
}