Pages: [1]   Go Down
Print
Author Topic: swap cambiando i puntatori  (Read 1891 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
rox
Forumista
***
Offline Offline

Posts: 633


« 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    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);
}
}
}
}

Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
corel_86
Forumista
***
Offline Offline

Gender: Male
Posts: 570



« Reply #1 on: 02-04-2009, 15:35:59 »

Che tipo di problema ti dà?
Logged

Se trovo qualcosa che non va lo faccio presente subito

Saluti ciaociao ciao

A.C.
rox
Forumista
***
Offline Offline

Posts: 633


« Reply #2 on: 02-04-2009, 15:46:30 »

mi compila ma quando lo eseguo nel main non succede nulla!!!la lista rimane tale e quale!!
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
corel_86
Forumista
***
Offline Offline

Gender: Male
Posts: 570



« Reply #3 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?
« Last Edit: 02-04-2009, 15:54:45 by corel_86 » Logged

Se trovo qualcosa che non va lo faccio presente subito

Saluti ciaociao ciao

A.C.
rox
Forumista
***
Offline Offline

Posts: 633


« Reply #4 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.
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
corel_86
Forumista
***
Offline Offline

Gender: Male
Posts: 570



« Reply #5 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
Logged

Se trovo qualcosa che non va lo faccio presente subito

Saluti ciaociao ciao

A.C.
rox
Forumista
***
Offline Offline

Posts: 633


« Reply #6 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
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
corel_86
Forumista
***
Offline Offline

Gender: Male
Posts: 570



« Reply #7 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
Logged

Se trovo qualcosa che non va lo faccio presente subito

Saluti ciaociao ciao

A.C.
havoc
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 224


« Reply #8 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.
Logged

rox
Forumista
***
Offline Offline

Posts: 633


« Reply #9 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.
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
corel_86
Forumista
***
Offline Offline

Gender: Male
Posts: 570



« Reply #10 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
Logged

Se trovo qualcosa che non va lo faccio presente subito

Saluti ciaociao ciao

A.C.
havoc
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 224


« Reply #11 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.
Logged

LtWorf
Forumista Esperto
****
Offline Offline

Posts: 1.079

Ogni cosa da me scritta è da intendersi come opinione personale e non come dato di fatto. Anche le eventuali dimostrazioni matematiche da me scritte saranno opinioni personali e quindi dovranno venire dimostrate da una terza parte di fiducia


WWW
« Reply #12 on: 08-04-2009, 16:42:01 »

Grazieeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee!!!!
Logged

There are some OO programming languages. I will create the first -_-' language.

LtWorf
rox
Forumista
***
Offline Offline

Posts: 633


« Reply #13 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
Logged

Una macchina è in grado di lavorare come cinquanta uomini comuni, ma nessuna macchina può svolgere il lavoro di un uomo straordinario.
havoc
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 224


« Reply #14 on: 11-04-2009, 10:02:59 »

ti ringrazio devo provarlo appena ho tempo
Se qualcosa non ti è chiaro io sono a disposizione.
Logged

Pages: [1]   Go Up
Print
Jump to: