[HELP Collegamento di struttre ricorsive [C]

di il
12 risposte

[HELP Collegamento di struttre ricorsive [C]

Ciao, sono alle prese con le strutture ricorsive. L'esercizio in questione mi chiede di collegare due liste concatenate, mediante la funzione concatenate che prende come argomenti i puntatori al primo nodo di ognuna delle liste e concateni la seconda alla prima. Qualcuno ha qualche suggerimento? Ora come ora ho solo definito la struct, e mi sono creato due nodi 'node1', 'node2'.

Per definizione di struttura ricorsiva, so che il puntatore *next punta a una struttura struct node dello stesso tipo. Ora come si possono legare le due liste distinte?
#include <stdio.h>
#include <stdlib.h>

//struttura ricorsiva list
struct node{
    char c;
    struct node *next;
};

int main(int argc, char **argv){

    struct node node1, node2;

	return 0;
}

12 Risposte

  • Re: [HELP Collegamento di struttre ricorsive [C]

    Tu, nessuna idea?
  • Re: [HELP Collegamento di struttre ricorsive [C]

    Suggerimento: fai finta di essere a giocare con i Lego
  • Re: [HELP Collegamento di struttre ricorsive [C]

    Dal punto di vista teorico, so che per collegare due liste devo far si che il puntatore della seconda lista punti all'ultimo nodo della prima, così da diventare un'unica lista. Ed è come collegare due mattoncini Lego in effetti. Non riesco però a capire dal punto di vista pratico come farlo.
  • Re: [HELP Collegamento di struttre ricorsive [C]

    Ragionaci. Hai due strutture...un campo che può contenere l'indirizzo di un'altra struttura...poi il C mette a disposizione l'operatore & per ricavare l'indirizzo di una variabile...
  • Re: [HELP Collegamento di struttre ricorsive [C]

    Dunque dovrei far sì che il next della seconda struttura punti al next della prima? In modo che scorrendo la lista avrei:
    -1 membro della prima lista;
    -next lista1;
    -1 membro della seconda lista;
    -next lista 2.
    È corretto ciò che dico o sono totalmente fuori strada?
  • Re: [HELP Collegamento di struttre ricorsive [C]

    Devi fare in modo che il next di una punti all'indirizzo dell'altra, il next della prima che punta alla seconda o viceversa...dipende dalla logica.
    Ah e l'ultimo next deve essere sempre uguale a NULL.
  • Re: [HELP Collegamento di struttre ricorsive [C]

    L'esercizio in particolare mi chiede di far collegare la lista2 alla lista1. Dunque il next(2) deve puntare al next(1). Ma il next(2) è anche l'ultimo next e deve essere uguale a null

    Per il momento questo è l'elaborato:
    #include <stdio.h>
    #include <stdlib.h>
    
    //definisco una struttura lista
    struct nodoLista{
        int value;
        struct nodoLista *next;
    };
    
    typedef struct nodoLista *tipoLista;    //sinonimo di nodoLista*
    
    
    int main(int argc, char **argv){
    
        tipoLista l1, l2;
    
        l1 = malloc(sizeof(struct nodoLista));  //alloco dinamicamente la prima struttura
        l1->value = 2;                        //assegno due al campo value
    
        l2 = malloc(sizeof(struct nodoLista));  //alloco dinamicamente la seconda struttura
        l2->value = 3;
    
        int ind = &(l1->next);      //ricavo l'indirizzo next della struttura l1
    
        return 0;
    }
  • Re: [HELP Collegamento di struttre ricorsive [C]

    Il next2 non deve puntare al next1 ma all'indirizzo della struttura 1.
  • Re: [HELP Collegamento di struttre ricorsive [C]

    jfet ha scritto:


    Il next2 non deve puntare al next1 ma all'indirizzo della struttura 1.
    int *ind = &l1;      //ricavo l'indirizzo della struttura l1
    l2->next = l1;      //il next della struttura l2 punta alla struttura l1
    In questo modo dovrebbe essere giusto, vero?
  • Re: [HELP Collegamento di struttre ricorsive [C]

    Ma l'indirizzo di quella struttura non ha tipo int *...penso che tu debba dare una ripassata ai puntatori prima e poi alle strutture e al loro funzionamento, sembra che hai le idee molto confuse e il mondo è pieno di materiale di studio.
  • Re: [HELP Collegamento di struttre ricorsive [C]

    Si mi ero scordato il tipo puntatore per prendere l'indirizzo. Sviluppando il codice, in una stampa, il programma visualizza a schermo l'indirizzo di l1, il valore di l1, ma non il valore di l2.
    Sembra che da l1, si collega a l2, ma la stampa non parte da l1->value, bensì da l1->next, l2->value e poi si interrompe poichè l2->next = NULL.
  • Re: [HELP Collegamento di struttre ricorsive [C]

    Ho risolto in questo modo, così facendo la stampa mi porta i valori delle due liste, nell'ordine voluto.
    #include <stdio.h>
    #include <stdlib.h>
    
    //definisco una struttura lista
    struct nodoLista{
        int value;
        struct nodoLista *next;
    };
    
    typedef struct nodoLista *tipoLista;    //sinonimo di nodoLista*
    
    int main(int argc, char **argv){
    
        tipoLista l1, l2;
    
        l1 = malloc(sizeof(struct nodoLista));  //alloco dinamicamente la prima struttura
        l1->value = 23;                        //assegno due al campo value
    
        l2 = malloc(sizeof(struct nodoLista));  //alloco dinamicamente la seconda struttura
        l2->value = 35;
    
        int *ind = &l2;      //ricavo l'indirizzo della struttura l1
        l1->next = *ind;      //il next della struttura l2 punta alla struttura l1
    
        l2->next = NULL;
    
        while(l1 != NULL){
            printf(" %d -->", l1->value);
            l1 = l1->next;
        }
    
        printf("NULL\n\n");
    
        return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
12 risposte