Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- struct lista{
- int dato;
- struct lista *prossimo;
- };
- lista* crea(lista* testa);
- void stampa(lista* testa);
- lista* elimina(lista* testa);
- lista* inserire(lista* testa);
- int conta(lista* testa);
- lista* dealloca(lista* testa);
- lista* ordina(lista* testa);
- lista* casuale(lista* testa);
- void pari(lista* testa);
- int main()
- {
- int choice;
- int menu = 1;
- int lungh;
- lista* head = NULL;
- while(menu == 1)
- {
- printf("\n\n1.Crea lista\n2.Stampa lista\n3.Eliminare\n4.Inserire elemento\n5.Conta elementi\n6.Dealloca lista\n7.Ordina\n8.Numeri pari\n9.ESCI\n");
- scanf("%d", &choice);
- switch (choice)
- {
- case 1:
- head = crea(head);
- break;
- case 2:
- stampa(head);
- break;
- case 3:
- head = elimina(head);
- break;
- case 4:
- head = inserire(head);
- break;
- case 5:
- lungh = conta(head);
- printf("\nSono presenti %d elementi", lungh);
- break;
- case 6:
- head = dealloca(head);
- break;
- case 7:
- head = ordina(head);
- break;
- case 8:
- pari(head);
- break;
- case 9:
- menu=0;
- break;
- default:
- printf("\nSelezionare numero esistente!");
- }
- }
- return 0;
- }
- lista* crea(lista* testa)
- {
- int n;
- int i;
- testa = (lista*)malloc(sizeof(lista));
- lista* nodo;
- printf("\nInserire numero elementi: ");
- scanf("%d", &n);
- printf("\nInserire elemento: ");
- scanf("%d", &testa->dato);
- nodo = testa;
- for(i=0; i<n-1; i++)
- {
- nodo->prossimo = (lista*)malloc(sizeof(lista));
- nodo = nodo->prossimo;
- printf("\nInserire elemento: ");
- scanf("%d", &nodo->dato);
- }
- nodo->prossimo = NULL;
- return testa;
- }
- void stampa (lista* testa)
- {
- lista* nodo;
- nodo = testa;
- if(nodo!=NULL)
- {
- printf("->%d", nodo->dato);
- stampa(nodo->prossimo);
- }
- }
- lista* inserire(lista* testa)
- {
- int pos;
- int n;
- int i;
- printf("\nSelezionare posizione del nuovo elemento: ");
- scanf("%d", &pos);
- printf("\nInserire valore elemento: ");
- scanf("%d", &n);
- lista* corr =(lista*)malloc(sizeof(lista));
- lista* succ = testa;
- corr->dato = n;
- if(pos==1)
- {
- corr->prossimo = testa;
- testa = corr;
- return testa;
- }
- for(i=0; i<pos-2; i++)
- {
- succ = succ->prossimo;
- }
- corr->prossimo = succ->prossimo;
- succ->prossimo = corr;
- return testa;
- }
- lista* elimina(lista* testa)
- {
- int del;
- int i;
- lista* corr;
- lista* succ;
- corr = testa;
- succ = testa->prossimo;
- printf("\nSelezionare numero posizione da elminare: ");
- scanf("%d", &del);
- if(del==1)
- {
- testa = corr->prossimo;
- free(corr);
- return testa;
- }
- else
- {
- for(i=0; i<del-2; i++)
- {
- corr=corr->prossimo;
- printf("\nposizione %d", corr->prossimo);
- }
- succ = corr->prossimo;
- corr->prossimo = succ->prossimo;
- free(succ);
- return testa;
- }
- }
- int conta(lista* testa)
- {
- lista* nodo;
- nodo = testa;
- if(nodo==NULL)
- {
- return 0;
- }
- else
- {
- return 1+conta(nodo->prossimo);
- }
- }
- lista* dealloca(lista* testa)
- {
- lista* nodo;
- lista* succ;
- nodo = testa;
- if(nodo!=NULL)
- {
- succ = nodo->prossimo;
- free(nodo);
- nodo = succ;
- }
- return NULL;
- }
- lista* ordina(lista* testa)
- {
- lista* curr;
- lista* succ;
- int tmp;
- for(curr=testa; curr!=NULL; curr=curr->prossimo)
- {
- for(succ=curr->prossimo; succ!=NULL; succ=succ->prossimo)
- {
- if(curr->dato > succ->dato)
- {
- tmp = succ->dato;
- succ->dato = curr->dato;
- curr->dato = tmp;
- }
- }
- }
- return testa;
- }
- void pari(lista* testa)
- {
- lista* nodo;
- nodo = testa;
- if(nodo!=NULL)
- {
- if(nodo->dato%2 == 0)
- {
- printf("%d->", nodo->dato);
- pari(nodo->prossimo);
- }
- else
- {
- pari(nodo->prossimo);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement