Sono nuovo sulle liste,come ho già scritto in alcuni post e vorrei ,da qualcuno esperto sapere in questo caso qual' è l' invariante (e perchè) e anche la complessità in tempo.Grazie a chiunque mi darà suggerimenti
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;
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)
{
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 */
/* 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;
}
}
int cerca(int x, node *lis)
{
int z=0;
while (lis != NULL)
{
if (lis->data==x) z=z+1;
printf("\nL' elemento e' %d",lis->data);
lis=lis->next;
}
return z;
}
int main()
{
node* head;node* head2;node *dispari;
int n;int m=6;
printf ("\n-----LISTA A-----\n");
head = buildlis ( );
printf ("\n-----STAMPA LISTA A-----\n");
int a=3;
printlis(head);
printf ("\n-----STAMPA LISTA A MODIFICATA-----\n");
int cercax=0;
cercax=cerca(3,head);
printf ("\nz e' %d\n",cercax);
if (cercax==0) printf ("\nnon c' e'\n");
else printf ("\n c' e'\n");
myFree ( head );
return 0;
}