예제 #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;
}
예제 #2
0
void imprimeListaInversa(Lista<TipoElemento>& l){
    posicion p,prim=l.primero();
    cout << "Imprimiendo lista inversa..." << endl;
    if (l.estaVacia()){
        cout << "La lista está vacia";
    }
    else{
        p=l.fin();
        do{
            p=l.anterior(p);
            cout << l.recupera(p)->dameCadena() << endl;
        }while(p!=prim);
    }
}
예제 #3
0
void inicializaABC(Lista<TipoElemento>& l){
    Persona* x;
    posicion i;
    int valorClave=1,cuenta=0;

    for(i=l.primero();cuenta<MAX_ELEMENTOS_LISTA;cuenta++){
        cout << "Llenando con clave " << valorClave << endl;
        x=new Persona(valorClave++,"El ");
        x->nombre+=intToString(x->clave);
        x->nombre+="o.";
        l.inserta(x,i);
        i=l.siguiente(i);
    }
}
예제 #4
0
void inicializaABC(Lista<TipoElemento>& l){
    Persona x;
    posicion i;
    int valorClave=1;

    i=l.primero();
    while(!l.estaLlena()){
        cout << "Llenando con clave " << valorClave << endl;
        x.clave=valorClave++;
        x.nombre="El ";
        x.nombre+=intToString(x.clave);
        x.nombre+="o.";
        l.inserta(x,i);
        i=l.siguiente(i);
    }
}
예제 #5
0
int main()
{
    Lista lis;
    Persona buscable,insertable,recuperado;
    posicion p;

    imprimirCentrado("TDA Lista con clases","#");
    pausar();
    cout << endl;
    inicializaABC(&lis);
    pausar();
    cout << "Imprimiendo lista:" << endl;
    lis.imprimeLista();
    pausar();
    insertable.clave=26;
    insertable.nombre="El insertado 26 al principio";
    cout << "Tratando de insertar..." << endl;
    lis.inserta(&insertable,lis.primero());
    pausar();
    buscable.clave=5;
    buscable.nombre="Uno con clave 5";
    cout << "Buscando elemento..." << endl;
    lis.imprimeElemento(&buscable);
    cout << endl;
    pausar();
    p=lis.localiza(&buscable);
    cout << "Localizado elemento en posicion p=" << p << "..." << endl;
    pausar();
    cout << "Imprimiendo lo que recibi de posicion" << endl;
    lis.imprimeElemento(lis.recupera(p));
    cout << endl;
    pausar();
    recuperado=*lis.recupera(p);
    cout << "El elemento recuperado es: ";
    lis.imprimeElemento(&recuperado);
    cout << endl;
    pausar();
    cout << "Suprimiendo elemento en posicion p=" << p << endl;
    lis.suprime(p);
    lis.imprimeLista();
    cout << "Insertando al principio de la lista..." << endl;
    lis.inserta(&insertable,lis.primero());
    pausar();
    cout << "Imprimiendo lista:" << endl;
    lis.imprimeLista();
    cout << "Elemento recuperado antes de suprimir de la lista: ";
    lis.imprimeElemento(&recuperado);
    cout << endl << "Eliminando ultimo elemento de la lista" << endl;
    lis.suprime(lis.anterior(lis.fin()));
    pausar();
    lis.imprimeLista();
    cout << "Insertando al final de la lista" << endl;
    insertable.clave=27;
    insertable.nombre="El insertado 27 al final";
    lis.inserta(&insertable,lis.fin());
    pausar();
    lis.imprimeLista();
    pausar();
    imprimeListaInversa(&lis);
    return 0;
}