Example #1
0
void hangarDeVagones(const int &numeroVagones, Pila<int> &entrada, Lista<int> &secuenciaSalida) {
    
    Pila<int> hangar;
    
    bool resultado = true;
    
    while( resultado && (! secuenciaSalida.esVacia() || ! hangar.esVacia()) ) {
        
        // Si el elemento de la cima es igual que el primer elemento
        // de la secuencia resultante lo sacamos de la pila.
        if (hangar.esVacia() || (! entrada.esVacia() && hangar.cima() < secuenciaSalida.primero()) ) {
            hangar.apila( entrada.cima() );
            entrada.desapila();
        }
        else if  (hangar.cima() == secuenciaSalida.primero() ) {
            
            hangar.desapila();
            secuenciaSalida.resto();
        }
        else if (hangar.cima() > secuenciaSalida.primero()) {
            resultado = false;
        }
    }
    
    if( resultado ) cout << "POSIBLE" << endl;
    else cout << "IMPOSIBLE" << endl;
}
Example #2
0
int viaDeEntrada(Pila<int> &entrada, Lista<int> &secuenciaSalida) {
    
    int numeroVagones = 0;
    
    //cout << "Introduzce el número de bagones: ";
    
    cin >> numeroVagones;
    
    if ( numeroVagones != 0) {
        //cout << endl << "Escriba la secuencia resultante de los bagones: " << endl;
        
        for (int n = 0; n < numeroVagones; n++) {
            
            //if( n > 0 ) cout << "Queda/n " << numeroVagones-n << " bagón/es." << endl;
            
            int a;
            
            cin >> a;
            
            secuenciaSalida.ponDr(a);
        }
        
        for (int j = numeroVagones; j > 0 ; j--) {
            entrada.apila(j);
        }
    }
    
    return numeroVagones;
}
Example #3
0
bool llaves(const char cadena[], int n, const char caracterAbertura, const char caracterCierre) {
    
    Pila<int> colaAbiertos;
    
    bool completos = true;
    
    int i = 0;
    int j = n-1;
    
    while(i < n) {
        
        if(cadena[i] == caracterAbertura) {
            
            colaAbiertos.apila(cadena[i]);
            
        } else if (cadena[i] == caracterCierre) {
            
            try {
                colaAbiertos.desapila();
            } catch(EPilaVacia e) {
                cout << e.msg() << endl;
            }
        }
        i++;
    }

    if ( ! colaAbiertos.esVacia()) {
        completos = false;
    }
    
    return completos;
}
Example #4
0
int main() {
	int wagons = -1, expected[10000];
	int i;

	while (wagons != 0) {
		cin >> wagons;

		for (i = 0; i < wagons; i++) {
				cin >> expected[i];
			}

			int currentWagon = 1;
			int expectedIndex = 0;
			Pila<int> station;
			while (currentWagon <= wagons) {
				station.apila(currentWagon);
				while (!station.esVacia()
						&& station.cima() == expected[expectedIndex] &&
						expectedIndex < wagons) {
					station.desapila();
					expectedIndex++;
				}
				currentWagon++;
			}

			if (station.esVacia())
				cout << "POSIBLE" << endl;
			else
				cout << "IMPOSIBLE" << endl;
		}

	return 0;
}
int main() {
	Pila<char> p;
	char c = 'a';
	while (c != '*'){ // Mientras no introduzca asterisco para terminar
		cout << "> "; // Mostramos prompt
		cin.get(c); // Leemos el primer caracter
		if (c != '*'){ // Si no es el asterisco
			while (c != '\n'){ // Mientras no haya fin de linea
				p.apila (c); // Apilamos el caracter
				cin.get(c); // Leemos el siguiente
			}
			while (!p.esVacia()){ // Mientras no se quede vacía la pila
				cout << p.cima(); // Escribimos la cima de la pila
				p.desapila(); // Desapilamos
			}
		}
		cout << endl; // Añadimos un salto de linea final
	}
	
	return 0;
}