Su questa funzione,che copia gli elementi compresi tra 2 e 8 l' invariante è appunto che stampa tutti i valori tra 2 e 8?
La complessità in tempo è O (n) perchè si scorre una sola volta la lista?
Com' è invece in spazio?
Grazie in anticipo
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)); } node *buildlis() { int x;int z=0; node *lis, *p, *last; printf("nuovo numero da inserire in lista:\n"); scanf("%d", &x); if (x==00000) 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 (00000 per terminare):\n"); scanf("%d", &x); z=z+1; while (x!=00000) { p=newnode(); p->data = x; p->next = NULL; last->next = p; last = p; printf("nuovo numero da inserire in lista (00000 per terminare):\n"); scanf("%d", &x); z=z+1; } } if (z>0) printf("Il valore e' %d\n",z); if(z==0) printf("|||||-----lista vuota-----|||||\n"); return(lis); } 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) ; tmp = tmp->next; } } void myFree ( node* top ) { node* tmp; tmp = top; while ( top->next != NULL ) { tmp = top->next; free(top); top = tmp; } } int conteggio(node *lis) { int acc=0; while (lis != NULL) { acc=acc+1; lis=lis->next; } return(acc); } node* moltiplica(node *l1) { node *p,*head,*tail; head=NULL;int n=0;int pos=1; if(l1==NULL) return NULL; while (l1!=NULL) { if((pos>2) && (pos<8)) { p=newnode(); p->data=l1->data; p->next=NULL; if(head==NULL){head=p,tail=p;} else{tail->next=p;tail=tail->next;}} pos++; l1=l1->next; } return head;} int main() { node* head;node* head2;node *dup; printf ("-----LISTA A-----\n"); head = buildlis ( ); printf ("\n-----STAMPA LISTA A-----\n"); printlis(head); printf ("\n-----CONTROLLO-----\n"); dup=moltiplica(head); printlis(dup); if(head==NULL) printf ("\nNESSUN RISULTATO ESPRIME I VALORI VOLUTI\n"); free ( head ); return 0; }

Rispondi quotando