Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [C] Somma tra liste?

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2016
    Messaggi
    3

    [C] Somma tra liste?

    Ciao a tutti ragazzi, come da titolo il mio problema riguarda la somma tra liste. Il programma parte però mi si blocca al momento della visualizzazione della lista somma..e non capisco perché! Forse ho sbagliato i parametri attuali della funzione? Mi potreste aiutare? (grazie in anticipo )

    Il codice è questo:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Lista {
        int info;
        struct Lista *next;
    } Nodo;
    
    Nodo *crea();
    void Visualizza(Nodo*);
    Nodo* SommaListe(Nodo *p1,Nodo *p2);
    
    int main() {
        Nodo *pun1,*pun2, *pun3;
    
        pun1=crea();
        Visualizza(pun1);
    
        pun2=crea();
        Visualizza(pun2);
    
        /*Invocazione della funzione per la somma delle liste*/
        pun3= SommaListe(pun1,pun2);
        Visualizza(pun3);
    }
    
    Nodo *crea() {
        Nodo *p, *paux;
        int i,n;
    
        printf("Da quanti elementi e' composta la lista?");
        scanf("%d", &n);
    
        if(n==0)
            p=NULL;
        else {
            p=(Nodo*)malloc(sizeof(Nodo));
            printf("Inserisci la 1a informazione: ");
            scanf("%d", &p->info);
            paux=p;
    
            for(i=2; i<=n; i++) {
                paux->next=(Nodo*)malloc(sizeof(Nodo));
                paux=paux->next;
                printf("Inserire la %da informazione: ",i);
                scanf("%d", &paux->info);
            }
            paux->next=NULL;
        }
        return(p);
    }
    
    void Visualizza(Nodo *p) {
        if(p!=NULL) {
            printf("--->");
            printf("%d", p->info);
            Visualizza(p->next);
        }
        else
            printf("NULL\n");
    }
    
    Nodo* SommaListe(Nodo *p1,Nodo *p2) {
        Nodo *p3=NULL, *paux3;
    
        if(p1!=NULL && p2!=NULL) {
            p3=(Nodo*)malloc(sizeof(Nodo));
            p3->info=p1->info+p2->info;
            paux3=p3;
            p1->next;
            p2->next;
    
            for(; p1!=NULL && p2!=NULL; ) {
                paux3->next=(Nodo*)malloc(sizeof(Nodo));
                paux3=paux3->next;
                paux3->info=p1->info+p2->info;
                p1->next;
                p2->next;
            }
            paux3->next=NULL;
        }
        return(p3);
    }
    Ultima modifica di MItaly; 12-02-2016 a 14:53 Motivo: Tag CODE, linguaggio nel titolo, indentazione

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286
    Non vedo "somma di liste", ma somma dei valori contenuti nei nodi di una lista.
    Forse potrebbe funzionare così:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    unsigned guElements = 0;
    
    typedef struct Lista {
        int info;
        struct Lista *next;
    } Nodo;
    
    Nodo root;
    
    void Init(void);
    Nodo * CreaNodo(void);
    void Visualizza(Nodo*);
    Nodo * SommaNodi(Nodo *p1, Nodo *p2);
    
    
    int main(void)
    {
        Nodo *pun1, *pun2, *pun3;
    
        Init();
    
        pun1 = CreaNodo();
        Visualizza(pun1);
    
        pun2 = CreaNodo();
        Visualizza(pun2);
    
        /*Invocazione della funzione per la somma delle liste*/
        pun3 = SommaNodi(pun1, pun2);
        Visualizza(pun3);
    }
    
    void Init(void)
    {
        root.info = 0;
        root.next = NULL;
    }
    
    Nodo * CreaNodo(void)
    {
        Nodo * pList = &root;        /* Ottieni la testa della lista */
        while(pList->next)            /* Vai all'ultimo elemento della lista */
            pList = pList->next;
    
        Nodo *this = (Nodo*)malloc(sizeof(Nodo));
    
        if (this)
        {
            guElements++;
            printf("Inserisci 1'informazione per l'elemento %u : ", guElements);
            scanf("%d", &this->info);
            this->next = NULL;
            pList->next = this; /* Appendi questo elemento all'ultimo elemento della lista */
        }
        else
        {
            printf("Creazione del nodo %d fallita!\n", guElements+1);
            return NULL;
        }
    
        return this;
    }
    
    void Visualizza(Nodo *p)
    {
        if(p)
            printf("L'elemento %u contiene l'informazione %d\n\n", guElements, p->info);
        else
            printf("L'elemento da visualizzare non esiste\n");
    }
    
    Nodo * SommaNodi(Nodo *p1, Nodo *p2)
    {
        Nodo * pList = &root;        /* Ottieni la testa della lista */
        while(pList->next)            /* Vai all'ultimo elemento della lista */
            pList = pList->next;
    
        Nodo *this = (Nodo*)malloc(sizeof(Nodo));
    
        if (this)
        {
            guElements++;
            this->next = NULL;
            pList->next = this; /* Appendi questo elemento all'ultimo elemento della lista */
        }
        else
        {
            printf("Creazione del nodo %d fallita!\n", guElements+1);
            return NULL;
        }
    
        if(p1 && p2)
            this->info = p1->info + p2->info;
        else
        {
            printf("Input errato in SommaNodi!\n");
            this->info = 0;
        }
    
        return this;
    }
    Ultima modifica di Paulin; 22-02-2016 a 00:00

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.