Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- struct ElementoDiLista
- {
- int info;
- struct ElementoDiLista *next;
- };
- typedef struct ElementoDiLista *lista;
- void add_coda(lista *l,int x);
- void add_cima(lista *l,int x);
- void canc_el(lista *l,int x);
- void stampa_lista(lista l);
- int main()
- {
- int x;
- lista l=NULL;
- scanf("%d",&x);
- while(x!=0)
- {
- scanf("%d",&x);
- if(x<0)
- {
- canc_el(&l,-x);
- }
- else if(x>0 && x%2==0)
- {
- add_cima(&l,x);
- }
- else if(x>0 && x%2!=0)
- {
- add_coda(&l,x);
- }
- }
- scanf("%d",&x);
- if(x==0)
- {
- stampa_lista(l);
- }
- return 0;
- free(l);
- }
- void add_coda(lista *l,int x)
- {
- lista new=malloc(sizeof(struct ElementoDiLista));
- new->info=x; //assegno alla nuova variabile il valore dell'elemento da aggiungere
- new->next=NULL; //new è l'ultimo elemento della lista
- if(*l==NULL)
- *l=new;
- else
- {
- lista aus=*l; //uso una lista ausiliaria per scorrere la lista
- while(aus->next!=NULL) //finchè non arrivo all'ultimo elemento della lista ausiliaria...
- {
- aus=aus->next; //...scorro la lista
- }
- aus->next=new; //siamo fuori dal while, quindi aus è l'ultimo elemento e aus->next prende il valore di a
- free(aus);
- }
- }
- void add_cima(lista *l,int x)
- {
- lista new=malloc(sizeof(struct ElementoDiLista));
- new->info=x; //nuova variabile con il valore dell'intero da aggiungere
- new->next=*l; //vedo che new è il primo elemento infatti new->next è il primo valore della lista data
- *l=new;
- }
- void canc_el(lista *l,int x)
- {
- if(*l!=NULL)
- {
- if((*l)->info==x) //se l'elemento puntato contiene x...
- {
- lista aus=*l; //...inizializzo una variabile aus che mi permette di eliminare l'elemento senza modificare la lista
- *l=(*l)->next; //scorro all'elemento successivo
- free(aus); //libero l'elemento voluto nella lista ausiliaria non modificando l'altra
- }
- else //altrimenti
- {
- lista prec=*l; //elemento precedente
- lista corr=(*l)->next; //elemento corrente
- int trovato=0;
- while(corr!=NULL && trovato==0) //finchè l'elemento corrente non è NULL e trovato=0...
- if(prec->info==x) //se l'elemento precedente contiene x
- {
- trovato=1;
- }
- else //altrimenti
- {
- prec=corr; //l'elemento precedente diventa quello corrente...
- corr=corr->next; //...quello corrente diventa il successivo
- }
- if(trovato==1) //se trovato =1...
- {
- prec->next=corr->next; //il precedente diventa corrente e il corrente diventa il successivo
- free(corr); //si libera l'elemento corrente
- }
- }
- }
- }
- void stampa_lista(lista l)
- {
- if(l!=0)
- {
- while(l!=NULL)
- {
- printf("%d\n",l->info);
- l=l->next;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement