Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C] inserire un elemento in fondo ad una catena-1

    Ciao a tutti, come posso inserire un elemento in fondo ad una catena-1?

    Ho pensato a questa soluzione, ma non sono sicuro della sua correttezza:
    codice:
    Nodo1* p = (Nodo1*) malloc (sizeof(Nodo1));
    assert(p!=NULL);
    
    // Inserisco nel nodo puntato da p l'elemento che voglio
    p->el = numero;
    p->next = NULL;
    
    while (c1!=NULL) // finchè il puntatore alla catena è != da NULL
          c1 = c1->next;
    c1 = p;

  2. #2
    potete aiutarmi?

  3. #3
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    codice:
    while (c1!=NULL) // finchè il puntatore alla catena è != da NULL
          c1 = c1->next;
    c1 = p;
    Non se se dico giusto, ma se cl è un puntatore al primo elemento della catena, quando sei arrivato in fondo, non devi fare c1=p, altrimenti lo farai semplicemente puntare a p, dovrai fare

    codice:
    c1->Next=p;
    Spero di aver capito bene.

  4. #4
    no, perchè alla fine del ciclo, c1 punta a null (significa che non punta a nessun altro nodo).
    c1->next non esiste alla fine.


    Te lo mostro in un disegno, così rende chiaro il discorso:
    Immagini allegate Immagini allegate

  5. #5
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    Hai ragione, allora usa due puntatori...

    codice:
    Nodo1 *previous;
    
    while (c1!=NULL){     
       previous=c1;
       c1 = c1->next;
    }
    previous->Next=p;
    p->Next=c1;// se p->Next non è già stato precedentemente settato a null

  6. #6
    bisogna allocarlo il puntatore previous prima di entrare nel ciclo e quindi di usarlo.

  7. #7
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    no, lo dichiari soltanto, perchè dovresti allocare dello spazio? Lo stai facendo soltanto puntare allo stesso indirizzo cui punta c1... lo mantieni al precedente nel ciclo while e quando stai puntando NUL con c1, previous punterà all'ultimo

  8. #8

    Re: [C] inserire un elemento in fondo ad una catena-1

    Dovresti fare una funzione di questo tipo :
    codice:
    Nodo1 *inserisci( Nodo1 *c1, int numero )
    {
    	Nodo1 *p = (Nodo1*) malloc (sizeof(Nodo1));
    	assert(p!=NULL);
    
    	// Inserisco nel nodo puntato da p l'elemento che voglio
    
    	p->el = numero;
    	p->next = NULL;
    
    	cout<<"Aggiungo il nuovo nodo ("<<numero<<")"<<endl;
    	// Se la lista è vuota p diventa il primo elemento
    	if( c1==NULL )
    		c1 = p;
    	else  
    	{
    		// Altrimenti lo accodo a quelli esistenti ...
    		while(c1->next!=NULL) // cerca ultimo elemento
    			c1 = c1->next;
    		c1->next=p;
    	}
    	// Restituisco il puntatore a c1
    	// Utile nel caso di assegnazione del primo elemento
    	return c1; 
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  9. #9
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035

    Re: Re: [C] inserire un elemento in fondo ad una catena-1

    [QUOTE]Originariamente inviato da Samuele_70

    codice:
    	
    	return c1; 
    }
    Io userei un puntatore a puntatore in questi casi... c1 lo ritorni modificato quando punta al primo elemento (lista vuota) e niente da dire... ma nel secondo caso (primo quote) lo ritorni che punta all'ultimo. il puntatore all'inizio della lista on dovrebbe essere mai spostato da dove punta, pena la perdita dell'inizio della lista.
    Sbaglio?

  10. #10

    Re: Re: Re: [C] inserire un elemento in fondo ad una catena-1

    Originariamente inviato da Lak3d
    ...
    Io userei un puntatore a puntatore in questi casi...
    Tu come la faresti insomma ?
    c1 lo ritorni modificato quando punta al primo elemento (lista vuota) e niente da dire... ma nel secondo caso (primo quote) lo ritorni che punta all'ultimo. il puntatore all'inizio della lista on dovrebbe essere mai spostato da dove punta, pena la perdita dell'inizio della lista.
    Sbaglio?
    No, non sbagli
    Ma che ci vuole a completarla ...
    codice:
    Nodo1 *inserisci( Nodo1 *c1, int numero )
    {
    	Nodo1 *first = c1;
    	Nodo1 *p = (Nodo1*) malloc (sizeof(Nodo1));
    	assert(p!=NULL);
    
    	// Inserisco nel nodo puntato da p l'elemento che voglio
    
    	p->el = numero;
    	p->next = NULL;
    
    	cout<<"Aggiungo il nuovo nodo ("<<numero<<")"<<endl;
    
    	if( c1==NULL )
    	{
    		c1 = p;
    		return c1;
    	}
    	else
    	{
    		while(c1->next!=NULL) // finchè il puntatore alla catena è != da NULL
    			c1 = c1->next;
    		c1->next=p;
    	}
    	return first;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.