Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    106

    C liste dinamiche spostare il primo e secondo

    non riesco a scambiare il primo elemento con il secondo, non capisco dove sbaglio. Come dovrei fare?
    grazie&ciao =)

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    assumendo che il tipo lista abbia un campo next di tipo lista *, se l è la testa della lista:

    if(l -> next == NULL)
    return;
    lista *primo = l;
    lista *secondo = l -> next;
    lista *terzo = secondo -> next;
    l = secondo;
    l -> next = primo;
    l -> next -> next = terzo;

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    106
    ok ci sono arrivato da solo..
    ora vorrei fare l'ordinamento.. a livello di logica come devo comportare? devo distinguere 3 casi? testa,centro e fine della lista?
    perchè non so come comportarmi con la testa visto che quando sposto un elemento se capita al primo posto devo associargli la testa della lista e nel caso in cui sono all'ultimo elemento il prox sarà null..

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    io ti direi di fare cosi: creati una funzione di scambio di due elementi di tipo lista *, in modo che quando esegui l'ordinamento, se hai bisogno di scambiare due elementi lo fai fare a questa funzione. Per scambiare due elementi si una lista hai bisogno di avere oltre ai puntatori agli elementi da scambiare, anche i puntatori ai rispettivi elementi precedenti, ad esempio, se devi scambiare 'c' ed 'f', e la lsita è questa:

    a-b-c-d-e-f-g-h

    devi collegare l'elemento che precede 'c' (b) con 'f', e l'elemento che precede 'f' (e) con b, oltre a collegare poi 'f' con 'd' e 'c' con 'g'. Ma l'importante è avere i puntatori ai precedenti, peril l'elemento successivo lo puoi sapere con il campo link. Nota che se un elemento ha come precedente NULL significa che è i èprimo della lista, e quindi se lo scambi con un altro elemento sarà qesto ad esesere la testa della lista

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    106
    a logica so come farlo è che non riesco a implementare il codice crasha sempre il programma, devo usare due cicli for annidati?

  6. #6
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    dipende dall'algoritmo che vuoi usare...ti consiglio prima di fare n algoritmo che lavora semplicemente su un array di numeri, e poi, una volta che funziona lo adatti alle liste; qui trovi alcuni algoritmi per array, i primi due sono semplici


    http://ciips.ee.uwa.edu.au/~morris/Y...0/sorting.html

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    106
    per array li so già fare è per le liste che incontro un pò di problemi..

  8. #8
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    prova a postare il codice...hai seguito il mio suggerimento di riscrivere l'algorimo in modo tale da utilizzare una funzione di scambio degli elementi?

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    106
    Originariamente inviato da anx721
    prova a postare il codice...hai seguito il mio suggerimento di riscrivere l'algorimo in modo tale da utilizzare una funzione di scambio degli elementi?
    stavo tentando di farlo, in pratica devo passare l'indirizzo della testa e dei due elementi che devo scambiare?

  10. #10
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    se la testa è una variabile globale non è necessaria passarla; poi vano passati i due elementi da scambiare e gli elementi ad essi precedenti. Una soluzione alternativa consiste nel passare solo di due elementi da scambiare, in questo caso pero devi passare i puntatori ai puntatori a tali elementi.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.