Ho un problema con 2 liste in c,dovrei fare la differenza tra gli elementi di una meno l' altra e generarne un 'altra,fino a qui tutto bene,ma quando una è pù breve dell' altra come posso fare per evitare di generare 2 funzioni come ho fatto in questo caso?Perchè se l1 è minore di l2 mi deve dare il valore negativo
codice:#include <stdlib.h> #include <stdio.h> typedef struct nod { int data; struct nod *next; struct nod *prev; } node; node *newnode(void) { return (node *)malloc(sizeof(node)); } /* Dato un intero n>0, costruisce la lista di nodi da 1 ad n */ node *buildlis() { int x; node *lis, *p, *last; printf("nuovo numero da inserire in lista:\n"); scanf("%d", &x); if (x<=0) lis= NULL; /* caso di lista vuota */ else { /* inserzione del primo elemento in una lista */ last=newnode(); lis = last; last->data = x; last->next = NULL; printf("nuovo numero da inserire in lista:\n"); scanf("%d", &x); while (x>0) /* Invariante: lis punta alla lista con tutti gli interi finora letti, tranne l'ultimo, e last punta all'ultimo nodo di tale lista */ { p=newnode(); p->data = x; p->next = NULL; last->next = p; last = p; printf("nuovo numero da inserire in lista:\n"); scanf("%d", &x); } } return(lis); } /* Stampa degli elementi di una lista */ void printlis(node *lis) { node* tmp; tmp = lis; int somma=0;float media=0;int conteggio=0; while (tmp != NULL) { printf(">>>> %d\n", tmp->data) && (somma=somma+tmp->data) && (conteggio=conteggio+1) ; tmp = tmp->next; } printf("Somma %d\n",somma); printf("Conteggio %d \n",conteggio); media=(somma/conteggio); printf("Media %f",media); } void myFree ( node* top ) { node* tmp; tmp = top; while ( top->next != NULL ) { tmp = top->next; free(top); top = tmp; } } node *duplist1(node *l) { node *p,*head,*tail; head=NULL; while (l != NULL) { p=newnode(); p->data = l->data; p->next = NULL; if (head == NULL) { head=p; tail=p;} else {tail->next=p; tail=tail->next;} l=l->next; } return head; } node *duplist2(node *l) { node *p,*head,*tail; head=NULL; while (l != NULL) { p=newnode(); p->data = -l->data; p->next = NULL; if (head == NULL) { head=p; tail=p;} else {tail->next=p; tail=tail->next;} l=l->next; } return head; } node *duplica(node *l1, node *l2) { node *p, *head, *tail; head=NULL; while ((l1 != NULL) && (l2 != NULL)) { p=newnode(); p->data = l1->data-l2->data; p->next = NULL; if (head == NULL){head=p; tail=p;} else {tail->next=p; tail=tail->next;} l1 = l1->next; l2 = l2->next; } if ((l1 == NULL) && (l2 == NULL)) return head; else if (l1 == NULL) { tail->next=duplist2(l2); return head;} else {tail->next=duplist1(l1); return head;} } int main() { node* head;node* head2;node *dup; int n;int m=6; printf ("\n-----LISTA A-----\n"); head = buildlis ( ); printf ("\n-----LISTA B-----\n"); head2 = buildlis ( ); printf ("\n-----STAMPA LISTA A-----\n"); int a=3; printlis(head); printf ("\n-----STAMPA LISTA B-----\n"); printlis(head2); printf ("\n-----STAMPA LISTA A MODIFICATA-----\n"); dup=duplica(head,head2); printlis(duplica(head,head2)); myFree ( head ); return 0; }

Rispondi quotando