Advertisement
Dany1858

Esercizio pile con liste

Dec 8th, 2014
527
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.25 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct pila{
  5.        int inf;
  6.        struct pila *pun;
  7. };
  8.  
  9.                     /*funzioni*/
  10. int menuPila();
  11. struct pila *creaPila();
  12. struct pila *pushPila(struct pila *);
  13. struct pila *popPila(struct pila *);
  14. struct pila *clearPila(struct pila *);
  15. void printPila(struct pila *);
  16. int confronto(struct pila *, int);
  17.  
  18. main()
  19. {
  20.       struct pila *puntTesta=NULL;
  21.       int menu=-1, cont=-1;
  22.      
  23.       while(menu!=0){
  24.         if(cont==-1) menu=1;
  25.         else menu=menuPila();
  26.  
  27.         switch(menu){
  28.            case 1: {
  29.               system("cls");
  30.               if(cont==-1) puntTesta= creaPila();
  31.               puntTesta= pushPila(puntTesta); cont=0; break;}
  32.            case 2: {
  33.               puntTesta= popPila(puntTesta); break;}
  34.            case 3: {puntTesta= clearPila(puntTesta); break;}
  35.            case 4: {printPila(puntTesta); break;}
  36.            case 5: {menu=0; break;}
  37.            default:{
  38.               printf("opzione non ammessa");
  39.               printf("\n\n\nIn attesa...\t");
  40.               getchar();}
  41.            }  
  42.       system("cls"); }
  43.       return 0;
  44. }
  45.  
  46.  
  47.                    /*menu'*/
  48. int menuPila()
  49. {
  50.              int menu;
  51.              printf("\n------------- MENU'------------\n");
  52.              printf("\n1. Inserisci elemento\n\n2. Rimuovi elemento\n\n3. Svuota pila\n\n4. Stampa pila\n\n5. Exit\n\n ");
  53.              scanf("%d", &menu);
  54.              getchar();
  55.              return menu;
  56. }
  57.  
  58.                      /*crea lista*/
  59. struct pila *creaPila()
  60. {      
  61.        struct pila *p;
  62.        p=(struct pila *)malloc(sizeof(struct pila));
  63.        printf("\nInserisci un elemento\t");
  64.        scanf("%d", &p->inf);
  65.        p->pun=NULL;
  66.        return(p);
  67. }
  68.  
  69. struct pila *pushPila(struct pila *p)
  70. {      
  71.        struct pila *paus;
  72.        struct pila x;
  73.        int conf;
  74.        paus=p;
  75.        while(x.inf!=0){
  76.            p=paus;
  77.            printf("\n\nInserisci un elemento, 0 per uscire\t");
  78.            scanf("%d", &x.inf);
  79.            conf=confronto(p, x.inf);
  80.            if(conf==0){ printf("\n\nElemento gia' presente!\t"); getchar;}
  81.            else if(x.inf!=0){
  82.            paus=(struct pila *)malloc(sizeof(struct pila));
  83.            paus->inf=x.inf; paus->pun=p;}}
  84.        return(paus);
  85. }
  86.  
  87. struct pila *popPila(struct pila *p)
  88. {
  89.        struct pila *paus=p;
  90.        system("cls");
  91.        p=p->pun;
  92.        printf("\n\n\tElemento eliminato: %d", paus->inf);
  93.        printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\nIn attesa...");
  94.        getchar();
  95.        free(paus);
  96.        return p;
  97. }
  98.  
  99. struct pila *clearPila(struct pila *p)
  100. {
  101.        struct pila *paus;
  102.        system("cls");
  103.        while(p!=NULL){
  104.            paus=p;
  105.            p=p->pun;
  106.            free(paus);}
  107.        printf("\n\n\n\n\t\tPila svuotata!!\n\n\n\n");
  108.        getchar();
  109.        return NULL;
  110. }
  111.            
  112. void printPila(struct pila *p)
  113. {
  114.      system("cls");
  115.      printf("\n\t|\t \t|");
  116.      while(p!=NULL){
  117.            printf("\n\t|\t%d\t|", p->inf);
  118.            p=p->pun;}
  119.      printf("\n\t_________________");
  120.      printf("\n\n\nIn attesa...");
  121.      getchar();
  122. }    
  123.  
  124. int confronto(struct pila *p, int ele)
  125. {
  126.     while(p!=NULL){
  127.          if(p->inf==ele) return 0;
  128.          p=p->pun;}
  129.     return 1;
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement