PDA

Visualizza la versione completa : [C]Creazione e visualizzazione di due liste


giumanji
18-02-2012, 18:13
Ciao a tutti sto cercando di creare e visualizzare due liste il problema solo che il codice che ho sviluppato stampa solo il primo elemento delle due liste e poi dei numeri tipo 9713624 posto il codice


#include <stdio.h>
#include <malloc.h>
struct elemento{
int val;
struct elemento *succ;
};
struct elemento *crealista();
void visualizza(struct elemento *);
main()
{
struct elemento *puntlista1,*puntlista2;
printf("Inserisci la prima lista:\n\n");
puntlista1=crealista();
printf("\nInserisci la seconda lista:\n\n");
puntlista2=crealista();
printf("\nVisualizzazione prima lista: \n\n");
visualizza(puntlista1);
printf("\nVisualizzazione seconda lista: \n\n");
visualizza(puntlista2);
printf("\nPremi invio per uscire...");
getchar();
getchar();
}

struct elemento *crealista()
{
int i,n;
struct elemento *primo,*corpo;
printf("Quanti valori vuoi inserire?: ");
scanf("%d",&n);
primo=(struct elemento *)malloc(sizeof(struct elemento));
printf("Inserisci il 1%c valore: ",248);
scanf("%d",&primo->val);
corpo=primo;
for(i=2;i<=n;i++){
corpo->succ=(struct elemento *)malloc(sizeof(struct elemento));
corpo=corpo->succ;
printf("Inserisci il %d%c valore: ",i,248);
scanf("%d",&corpo->succ);
}
corpo->succ=NULL;
return(primo);
}

void visualizza(struct elemento *p)
{
while(p!=NULL){
printf("%d --->",p->val);
p=p->succ;
}
printf("NULL\n\n");
}

Esempio:
inserisco la lunghezza della prima lista : 3
inserisco gli elementi 5 , 4 , 2
inserisco la lunghezza della seconda lista: 4
inserisco gli elementi: 1 , 3 , 6 , 8
Stampa questo:
Prima lista: 5---> 9713624---> 9713624---> NULL
Seconda lista: 1---> 9713624---> 9713624---> 9713624--->NULL

Come posso fare per risolvere il problema??
Grazie per l'aiuto. :)

oregon
18-02-2012, 18:23
Scusa, ma questa

scanf("%d",&corpo->succ);

a che serve?

giumanji
18-02-2012, 18:29
Talè !!!! Non me n'ero accorto completamente! Correggo subito con scanf("%d",&corpo->val).
Grazie mille ! :)

oregon
18-02-2012, 18:38
Originariamente inviato da giumanji
Talè !!!!

Io comprendo l'esclamazione, non so gli altri nel forum ...

(traduz. "ma guarda un po' !")


Non me n'ero accorto completamente! Correggo subito con scanf("%d",&corpo->val).

Piuttosto disattento per un aspirante programmatore ...


Grazie mille ! :)

Di nulla ...

giumanji
18-02-2012, 18:55
Ahah scusa per il talè ! Siccome non l'avevo sbagliata mai questa cosa neanche andavo a controllare gli scanf! Cmq per fortuna non sono un aspirante programmatore ...vado in mate e ho l'esame di programmazione xD.
Adesso ho un altro problema sto sommando le due liste solo che nella somma anzichè avere lunghezza uguale alla minore ha un elemento in più della minore...ho inserito la funzione somma e puntlista3.


struct elemento *somma(struct elemento *,struct elemento *);
main()
{
struct elemento *puntlista1,*puntlista2,*puntlista3;
printf("Inserisci la prima lista:\n\n");
puntlista1=crealista();
printf("\nInserisci la seconda lista:\n\n");
puntlista2=crealista();
printf("\nVisualizzazione prima lista: \n\n");
visualizza(puntlista1);
printf("\nVisualizzazione seconda lista: \n\n");
visualizza(puntlista2);
puntlista3=somma(puntlista1 , puntlista2);
visualizza(puntlista3);
printf("\nPremi invio per uscire...");
getchar();
getchar();
}


Questa è la funzione somma:

struct elemento *somma(struct elemento *p1, struct elemento *p2)
{
struct elemento *p3,*p3corpo;
if(p1!=NULL && p2!=NULL){
p3=(struct elemento *)malloc(sizeof(struct elemento));
p3->val=(p1->val)+(p2->val);
p3corpo=p3;
for(;p1!=NULL && p2!=NULL;){
p3corpo->succ=(struct elemento *)malloc(sizeof(struct elemento));
p3corpo=p3corpo->succ;
p3corpo->val=(p1->val)+(p2->val);
p1=p1->succ;
p2=p2->succ;
}
p3corpo->succ=NULL;
}
printf("Visualizza somma Liste:\n\n");
return(p3);
}


Es:
inserisco prima lista lunghezza 3 valori 1 2 3
inserisco seconda lista lunghezza 5 valori 1 2 3 4 5
visualizza la somma: 2-->2-->4--->6--->NULL

C'è il primo valore che si ripete e non dovrebbe...non capisco perchè..

giumanji
18-02-2012, 19:18
Risolto il problema dimenticavo di far scorrere avanti le due liste dopo la creazione del primo elemento somma.

Loading