Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 2, 9 CFU => Topic started by: rox on 02-04-2009, 14:30:46



Title: swap cambiando i puntatori
Post by: rox on 02-04-2009, 14:30:46
ragazzi io ho provato a fare un metodo che mi ordini la lista in senso crescente ma ho un problema con lo swap .poverinoi   qualcuno mi potrebbe aiutare?
questo è il mio codice ma non capisco cosa ci sia di sbagliato!!
Code:
public void ordinaLista()//mi sposta i nodi
{
NodoInt swap=head;
NodoInt aux;

NodoInt prec;
for(aux=head.getNext();aux.getNext()!=null;aux=aux.getNext())
{     
int r=0;
for(prec=head;r<getSize()-1;prec=prec.getNext(),r++)
{
if(prec.getInfo()>(prec.getNext()).getInfo())
{
swap.setNext(prec);
prec.setNext(prec.getNext());
(prec.getNext()).setNext(swap);
}
}
}
}



Title: Re:swap cambiando i puntatori
Post by: corel_86 on 02-04-2009, 15:35:59
Che tipo di problema ti dà?


Title: Re:swap cambiando i puntatori
Post by: rox on 02-04-2009, 15:46:30
mi compila ma quando lo eseguo nel main non succede nulla!!!la lista rimane tale e quale!!


Title: Re:swap cambiando i puntatori
Post by: corel_86 on 02-04-2009, 15:48:57
ok capisco ora analizzo il tuo codice e ti voglio dire 2 cose:
1) metti i commenti cosi si capisce cosa fanno i vari nodi e le variabili;
2) cosa hai utilizzando per capire che hai sbagliato? se non hai un metodo di stampa nel main non capirai se stai procedendo in modo corretto oppure no

non ti seccare ma devo capire cosa hai utilizzato non mi fraintendere ok? :-OK :-OK


scusami mi sono dimenticato di dirti una cosa getSize ritorna quanti elementi ci sono in lista giusto?


Title: Re:swap cambiando i puntatori
Post by: rox on 02-04-2009, 16:29:58
si getSize() mi ritorna quanti elementi ci sono in lista.il metodo che mi stampa la lista l'ho fatto e funziona correttamente.


Title: Re:swap cambiando i puntatori
Post by: corel_86 on 02-04-2009, 16:35:03
il problema è il fatto che ti fa fare un ciclo infinito per questo non ti fa fare niente
il mio consiglio è quello di evitare di farlo soltanto con i numeri interi (Usa gli Object) e utilizzare un metodi di scambio a parte che ti fa fare lo scambio dei valori contenuti su aux.getInfo e prec.getInfo cosi puoi togliere il nodo swap ovviamente precisando che prev non si sposti se il numero è maggiore del successivo.......

non so se ho reso l'idea comunque prova a fare queste modifiche e fammi sapere

ciao :-ciao :-ciao


Title: Re:swap cambiando i puntatori
Post by: rox on 02-04-2009, 16:47:25
quello che dici tu già lo fatto!!ma io non voglio scambiare le informazioni all'interno dei nodi!!voglio che siamo cambiati i puntatori!!non so se mi sono spiegato


Title: Re:swap cambiando i puntatori
Post by: corel_86 on 02-04-2009, 16:55:48
Nodo aux=head;
Nodo prev=head.getNext();

//per scambiare i nodi basta che fai

Nodo swap=aux;
aux=prec;
prec = aux;

se vuoi scambiare soltanto i puntatori basta che fai cosi dovrebbe funzionare


Title: Re:swap cambiando i puntatori
Post by: havoc on 02-04-2009, 17:10:23
Non ho visto il tuo codice con attenzione, ma vedo diverse cose che non vanno:
- se la lista ha dimensione uno già il primo for dovrebbe andarti in eccezione
- swap viene inizializzato a head, ma poi non viene più cambiato

Appena ho un po' più di tempo lo guardo con calma.


Title: Re:swap cambiando i puntatori
Post by: rox on 02-04-2009, 17:39:02
Non ho visto il tuo codice con attenzione, ma vedo diverse cose che non vanno:
- se la lista ha dimensione uno già il primo for dovrebbe andarti in eccezione
- swap viene inizializzato a head, ma poi non viene più cambiato

Appena ho un po' più di tempo lo guardo con calma.
ok grazie attendo tue risposte
Nodo aux=head;
Nodo prev=head.getNext();

//per scambiare i nodi basta che fai

Nodo swap=aux;
aux=prec;
prec = aux;

se vuoi scambiare soltanto i puntatori basta che fai cosi dovrebbe funzionare
ok appena ho un po'di tempo lo provo.


Title: Re:swap cambiando i puntatori
Post by: corel_86 on 02-04-2009, 17:42:39
scusa ho sbagliato

Nodo aux=head;
Nodo prev=head.getNext();

//per scambiare i nodi basta che fai

Nodo swap=aux;
aux=prec;
prec = swap;

ho confuso le istruzioni


Title: Re:swap cambiando i puntatori
Post by: havoc on 04-04-2009, 15:37:36
Allora,
Code:
for(NodoInt i=head; i != null; i=i.getNext())
{
    NodoInt prev = null;
    for(NodoInt j=head; j != null; prev=j, j=j.getNext())
    {
        NodoInt next = j.getNext();
        if (next != null && j.getInfo() > next.getInfo())
        {
            // swap
            if (prev != null)
                prev.setNext(next);
            j.setNext(next.getNext());
            next.setNext(j);
            // check for head changes
            if (j == head)
                head = next;
        }
    }
}
questo è il bubblesort cambiando solo i riferimenti e non scambiando i contenuti.
Ovviamente non è ottimizzato, ma funziona alla perfezione.


Title: Re:swap cambiando i puntatori
Post by: LtWorf on 08-04-2009, 16:42:01
Grazieeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee!!!!


Title: Re:swap cambiando i puntatori
Post by: rox on 10-04-2009, 22:53:20
Allora,
Code:
for(NodoInt i=head; i != null; i=i.getNext())
{
    NodoInt prev = null;
    for(NodoInt j=head; j != null; prev=j, j=j.getNext())
    {
        NodoInt next = j.getNext();
        if (next != null && j.getInfo() > next.getInfo())
        {
            // swap
            if (prev != null)
                prev.setNext(next);
            j.setNext(next.getNext());
            next.setNext(j);
            // check for head changes
            if (j == head)
                head = next;
        }
    }
}
questo è il bubblesort cambiando solo i riferimenti e non scambiando i contenuti.
Ovviamente non è ottimizzato, ma funziona alla perfezione.
ti ringrazio devo provarlo appena ho tempo


Title: Re:swap cambiando i puntatori
Post by: havoc on 11-04-2009, 10:02:59
ti ringrazio devo provarlo appena ho tempo
Se qualcosa non ti è chiaro io sono a disposizione.