Class Empresa 1/2
/**
* PREGUNTA 1 DEL EXAMEN DE SEGUNDO PARCIAL
* SE REQUIEREN DOS PILAS UNA PARA FORMAR LA TIRA DE NO REPETIDOS
* Y OTRA PARA ALMACENAR LOS REPETIDOS
*
* ESTRATEGIA:
* 1 CONSTRUIR LA PRIMERA TIRA SIN REPETICIONES
* RESULTADO DE ESTE PROCESO SE TENDRA UNA PRIMERA TIRA
* Y UNA PILA DE ELEMENTOS REPETIDOS QUE NO SE PUDIERON ACOMODAR EN UNA PASADA
* 2 INSERTAR LOS REPETIDOS EN LA TIRA
* RESULTADO DE ESTE PROCESO SE TENDRA QUE LA PILA DE REPETIDOS
* SE VACIARA Y SE OBTENDRA LA TIRA FINAL
* 3 MOSTRAR LA CADENA RESULTANTE
* RESULTADO DE ESTE PROCESO ES LA CADENA RESULTADO DE LOS BANDERINES
* QUE SE ENCUENTRAN EN LA TIRA
*
* LA CONDICION DEL PROBLEMA ES QUE EN LA ENTRADA ORIGINAL, JAMAS SE
* TENDRA MAS DE 3 INSTANCIAS DE BANDERIN DEL MISMO COLOR CONSECUTIVO
* Y QUE LA CANTIDAD DE COLORES ES LA MISMA. POR LO QUE, EN DOS RONDAS
* SE TENDRA UNA TIRA CON LAS CONDICIONES QUE SE REQUIEREN.
*
* @author MLBC
* @version 31.12.09
*/
import EDL.*;
public class Empresa
{
/*
* Metodo que dirige todo el proceso, y procesa los tres pasos
* generales de la solucion
*
*/
public String generar(String entrada)
{
Pila<Character> tira, repetidos;
tira = new Pila<Character>();
repetidos = new Pila<Character>();
crearTira(entrada, tira, repetidos);
eliminarRepetidos(tira, repetidos);
return mostrar(tira);
}
/* Metodo crearTira, que lee cada caracter de una cadena de entrada
* e intenta acomodar en una tira sin repeticiones.
* Al mismo tiempo genera la pila de repticiones, pero tambien
* intenta la insercion de las repeticiones en la tira
*
* el resultado de este proceso es que las pilas cambiaran de estado
*/
private void crearTira(String entrada,
Pila<Character> tira,
Pila<Character> repetidos)
{
Character band;
for(int i = 0; i < entrada.length(); i ++)
{
Dec 31, 2009 8:32:04 AM
Class Empresa (continued) 2/2
band = entrada.charAt(i);
if(tira.vacia()) tira.push(band);
else if(tira.top().equals(band))
repetidos.push(band);
else {
tira.push(band);
if(!repetidos.vacia())
if(!repetidos.top().equals(band))
tira.push(repetidos.pop());
}
}
}
/* Metodo que permite insetar los elementos repetidos en la tira
* que se ha generado en una primera pasada.
*
* Esta demostrado que este problema se resuleve en a lo sumo dos
* pasadas sobre la tira
*
* Al terminar, la pila tira tendra los nuevos elementos incorporados
* y la pila repetidos quedara vacia
*/
private void eliminarRepetidos(Pila<Character> tira, Pila<Character> repetidos)
{
if(!repetidos.vacia())
crearTira(mostrar(tira), tira, repetidos);
}
/*
* Metodo que permite reconstruir la cadena resultante sobre la base
* de los elementos de la pila
*
* El resultado de este proceso es una cadena y en consecuencia la pila
* tira queda vacia
*/
private String mostrar(Pila<Character> tira)
{
String res = "";
while(!tira.vacia())
res = tira.pop() + res;
return res;
}
}
Dec 31, 2009 8:32:05 AM

Banderines examen resuelto estructura de datos con java usando pilas

  • 1.
    Class Empresa 1/2 /** *PREGUNTA 1 DEL EXAMEN DE SEGUNDO PARCIAL * SE REQUIEREN DOS PILAS UNA PARA FORMAR LA TIRA DE NO REPETIDOS * Y OTRA PARA ALMACENAR LOS REPETIDOS * * ESTRATEGIA: * 1 CONSTRUIR LA PRIMERA TIRA SIN REPETICIONES * RESULTADO DE ESTE PROCESO SE TENDRA UNA PRIMERA TIRA * Y UNA PILA DE ELEMENTOS REPETIDOS QUE NO SE PUDIERON ACOMODAR EN UNA PASADA * 2 INSERTAR LOS REPETIDOS EN LA TIRA * RESULTADO DE ESTE PROCESO SE TENDRA QUE LA PILA DE REPETIDOS * SE VACIARA Y SE OBTENDRA LA TIRA FINAL * 3 MOSTRAR LA CADENA RESULTANTE * RESULTADO DE ESTE PROCESO ES LA CADENA RESULTADO DE LOS BANDERINES * QUE SE ENCUENTRAN EN LA TIRA * * LA CONDICION DEL PROBLEMA ES QUE EN LA ENTRADA ORIGINAL, JAMAS SE * TENDRA MAS DE 3 INSTANCIAS DE BANDERIN DEL MISMO COLOR CONSECUTIVO * Y QUE LA CANTIDAD DE COLORES ES LA MISMA. POR LO QUE, EN DOS RONDAS * SE TENDRA UNA TIRA CON LAS CONDICIONES QUE SE REQUIEREN. * * @author MLBC * @version 31.12.09 */ import EDL.*; public class Empresa { /* * Metodo que dirige todo el proceso, y procesa los tres pasos * generales de la solucion * */ public String generar(String entrada) { Pila<Character> tira, repetidos; tira = new Pila<Character>(); repetidos = new Pila<Character>(); crearTira(entrada, tira, repetidos); eliminarRepetidos(tira, repetidos); return mostrar(tira); } /* Metodo crearTira, que lee cada caracter de una cadena de entrada * e intenta acomodar en una tira sin repeticiones. * Al mismo tiempo genera la pila de repticiones, pero tambien * intenta la insercion de las repeticiones en la tira * * el resultado de este proceso es que las pilas cambiaran de estado */ private void crearTira(String entrada, Pila<Character> tira, Pila<Character> repetidos) { Character band; for(int i = 0; i < entrada.length(); i ++) { Dec 31, 2009 8:32:04 AM
  • 2.
    Class Empresa (continued)2/2 band = entrada.charAt(i); if(tira.vacia()) tira.push(band); else if(tira.top().equals(band)) repetidos.push(band); else { tira.push(band); if(!repetidos.vacia()) if(!repetidos.top().equals(band)) tira.push(repetidos.pop()); } } } /* Metodo que permite insetar los elementos repetidos en la tira * que se ha generado en una primera pasada. * * Esta demostrado que este problema se resuleve en a lo sumo dos * pasadas sobre la tira * * Al terminar, la pila tira tendra los nuevos elementos incorporados * y la pila repetidos quedara vacia */ private void eliminarRepetidos(Pila<Character> tira, Pila<Character> repetidos) { if(!repetidos.vacia()) crearTira(mostrar(tira), tira, repetidos); } /* * Metodo que permite reconstruir la cadena resultante sobre la base * de los elementos de la pila * * El resultado de este proceso es una cadena y en consecuencia la pila * tira queda vacia */ private String mostrar(Pila<Character> tira) { String res = ""; while(!tira.vacia()) res = tira.pop() + res; return res; } } Dec 31, 2009 8:32:05 AM