n° 185
Maggio/Giugno 2013
Maggio 22, 2013, 05:31:40 am *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  

* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Unire due liste dinamiche in una Lista dinamica  (Letto 546 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
ziomerio
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 7


Mostra profilo E-mail
« inserita:: Agosto 17, 2012, 02:53:14 pm »

Codice:
#include <stdio.h>
typedef struct Elem {
    int val;
    struct Elem *next; // puntatore al prossimo elemento o NULL
} Elem, *List;

    List unisci(List *t,List *b){
      List *f=b;
 while((*f)->next!=NULL){

          f = &(*f)->next;
      }
      (*f)->next=*t;

      return *f;
    }


Mi funziona però Se in una lista ho 7 8 e nell'altra ho 4 5 mi ridà la lista con 8->4->-5 sicuramente sbaglio  f = &(*f)->next; qui forse dovrei usare un altra lista di appoggio?? scusate se non mi sono spiegato bene Felice
Registrato
VBeXtreme
Sr. Member
****

Karma: +17/-99
Scollegato Scollegato

Messaggi: 662



Mostra profilo
« Risposta #1 inserita:: Agosto 18, 2012, 10:52:21 am »

Ma per unire due liste non basta far puntare l'ultimo elemento della prima al primo della seconda?
Poi esegui gli ordinamenti voluti...
Registrato

Ragionare non è nient’altro che calcolare
"Thomas Hobbes"
M.A.W. 1968
** LEGGETE IL REGOLAMENTO ! **
Global Moderator
Hero Member
*****

Karma: +204/-15
Scollegato Scollegato

Messaggi: 2706


Discrete And Combinatorial Mathematics


Mostra profilo WWW
« Risposta #2 inserita:: Agosto 18, 2012, 02:28:45 pm »

Il merge di due strutture dati già ordinate - diciamo di dimensioni rispettivamente d1 e d2, con d1+d2=n  fornisce in output, generalmente in tempo O(n), una struttura dati a sua volta ordinata che contiene tutti e soli gli n dati già contenuti nelle strutture di input. Tale prestazione non è in alcun modo ottenibile con metodi differiti, i.e. join + sort, che ovviamente richiede O(nlogn) passi nel caso migliore.

Nel tipico algoritmo di merging, restando al semplice caso con due strutture in input e con un banale paragone meccanico, il "collettore" di input ossia il canale dal quale viene "prelevato" il prossimo elemento della struttura di output è gestito da una variabile logica, a sua volta generata dal confronto tra i-esimo elemento della struttura (lista, stack, array...) A e j-esimo della struttura B, con i e j opportuni indici indipendenti. Nel caso di strutture dati grezze e primitive come le LLS, agli indici si sostituiranno i due usuali puntatori ausiliari.

Il caso a liste multiple richiede algoritmi meno ingenui, che con k liste di lunghezza media n/k (in altri termini, la lista di output contiene ancora n elementi) possono comunque raggiungere prestazioni dell'ordine di O(nlogk) - un risultato chiaramente derivabile, ad esempio, dall'uso di classici algoritmi per la gestione di uno heap con k nodi, con tempo di push/pop pari appunto a O(logk).


Se invece si parla di una banale operazione append tra due liste, indipendentemente dall'ordinamento, dovrà chiarirlo l'OP.
Registrato

I Moderatori invitano tutti gli utenti a prendere visione del REGOLAMENTO e a rispettarlo.

Un blog? Io? Occhiolino
VBeXtreme
Sr. Member
****

Karma: +17/-99
Scollegato Scollegato

Messaggi: 662



Mostra profilo
« Risposta #3 inserita:: Agosto 19, 2012, 07:57:50 am »

Citazione di: vbextreme
Poi esegui gli ordinamenti voluti...

avrei dovuto scrivere:
Poi fai ciò che vuoi...

Grazie maw per aver rimediato.
Registrato

Ragionare non è nient’altro che calcolare
"Thomas Hobbes"
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2011 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



Links to Page