Advertisement
Guest User

Untitled

a guest
Feb 7th, 2012
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.96 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. /*Realizzare in C le funzioni per la gestione, mediante menĂ¹, delle strutture dati pila e coda mediante lista
  6. lineare dinamica e generica con [rispettivamente senza] nodo sentinella.*/
  7.  
  8. typedef struct
  9. {int num;}Info;
  10.  
  11. /*strutture separate per generalizzazione*/
  12.  
  13. struct list
  14. {
  15.    Info val;
  16.    struct list *next;
  17. };
  18.  
  19. typedef struct list List;
  20.  
  21. void push(int,Info*,void **);
  22. void pop(void **);
  23. void enqueque(int,Info*,void **);
  24. void dequeque(void **);
  25. void visitpila(void *);
  26. void visitcoda(void *);
  27. void crealist(void **);
  28.  
  29. int main ()
  30. {
  31.  
  32.  
  33.    List *pila,*coda,*pcoda,*ppila;
  34.    int sc=10,x=sizeof(Info);
  35.    Info *dato;
  36.  
  37.    printf("\nMENU: \n");
  38.    printf("immettere 1 per creare una pila \n");
  39.    printf("immettere 2 per creare una coda \n");
  40.    printf("immettere 3 per funzione push (pila) \n");
  41.    printf("immettere 4 per funzione pop  (pila)\n");
  42.    printf("immettere 5 per funzione enqueque (coda) \n");
  43.    printf("immettere 6 per funzione dequeque (coda) \n");
  44.    printf("immettere 7 per visualizzare MENU \n");
  45.    printf("immettere 0 per uscire");
  46.  
  47.    while(sc!=0)
  48.  {
  49.    printf("\n\n--opzione: ");
  50.    scanf("%d",&sc);
  51.  
  52.   switch(sc)
  53.     {
  54.        case 1:
  55.        {
  56.           crealist(&pila);
  57.           ppila=pila;
  58.           printf("\n--Pila creata!--\n");
  59.        }break;
  60.  
  61.        case 2:
  62.        {
  63.           crealist(&coda);
  64.           pcoda=coda;
  65.           printf("\n--Coda creata!--\n");
  66.        }break;
  67.  
  68.        case 3:
  69.        {
  70.           printf("\ninserire dato: ");
  71.           scanf("%d",&dato->num);
  72.           push(x,dato,&pila);
  73.           visitpila(pila);
  74.        }break;
  75.  
  76.        case 4:
  77.        {
  78.           pop(&pila);
  79.           visitpila(pila);
  80.        }break;
  81.  
  82.        case 5:
  83.        {
  84.           printf("\ninserire dato: ");
  85.           scanf("%d",&dato->num);
  86.           enqueque(x,dato,&pcoda);
  87.           visitcoda(coda);
  88.        }break;
  89.  
  90.        case 6:
  91.        {
  92.           dequeque(&coda);
  93.           visitcoda(coda);
  94.        }break;
  95.  
  96.        case 7:
  97.        {
  98.          printf("\nMENU: \n");
  99.          printf("immettere 1 per creare una pila \n");
  100.          printf("immettere 2 per creare una coda \n");
  101.          printf("immettere 3 per funzione push (pila) \n");
  102.          printf("immettere 4 per funzione pop  (pila)\n");
  103.          printf("immettere 5 per funzione enqueque (coda) \n");
  104.          printf("immettere 6 per funzione dequeque (coda) \n");
  105.          printf("immettere 7 per visualizzare MENU \n");
  106.          printf("immettere 0 per uscire");
  107.  
  108.        }break;
  109.     }
  110.  }
  111.  
  112.    return 0;
  113. }
  114.  
  115. void crealist (void **list)
  116. {
  117.  
  118.    List *p;
  119.  
  120.    *list=NULL;
  121.  
  122.    /*per semplificare la stesura del codice utilizzo uno una testa vuota
  123.   facendo partire i valori dal nodo immediatamente successivo*/
  124.  
  125.    /*alloca memoria per un nodo*/
  126.    p=calloc(1,sizeof(List));
  127.  
  128.    /*collega il nodo alla testa*/
  129.    p->next=(List*)*list;
  130.    /*aggiorna head al nuovo nodo*/
  131.    *list=p;
  132. }
  133.  
  134. void visitpila(void *list)
  135. {
  136.  
  137.    List *p=(List*)list;
  138.    int i=0;
  139.  
  140.    while(p->next != NULL)
  141.    {
  142.     printf("\n  ||\n  \\/\n#%d - %d",i,p->val.num);
  143.     p=p->next;
  144.     i++;
  145.    }
  146. }
  147.  
  148. void visitcoda(void *list)
  149. {
  150.  
  151.    List *p=(List*)list;
  152.    int i=0;
  153.  
  154.    while(p->next != NULL)
  155.    {
  156.     p=p->next;
  157.     printf("\n  ||\n  \\/\n#%d - %d",i,p->val.num);
  158.     i++;
  159.    }
  160. }
  161.  
  162. void push(int len, Info *dato,void **testa)
  163. {
  164.    List *p;
  165.  
  166.    p=calloc(1,sizeof(List));
  167.  
  168.    memcpy(p,dato,len);
  169.  
  170.    p->next=(List*)*testa;
  171.  
  172.    *testa=p;
  173. }
  174.  
  175. void enqueque(int len, Info *dato, void **punt)
  176. {
  177.    List *p;
  178.  
  179.    p=calloc(1,sizeof(List));
  180.  
  181.    memcpy(p,dato,len);
  182.  
  183.    p->next=((List*)*punt)->next;
  184.  
  185.    ((List*)*punt)->next=p;
  186.  
  187.    *punt=p;
  188. }
  189.  
  190. void pop(void **testa)
  191. {
  192.    List *p;
  193.  
  194.    p=((List*)*testa)->next;
  195.  
  196.    free((List*)*testa);
  197.  
  198.    *testa=p;
  199. }
  200.  
  201. void dequeque(void **punt)
  202. {
  203.    List *p;
  204.  
  205.    p=((List*)*punt);
  206.  
  207.    *punt=((List*)*punt)->next;
  208.  
  209.    free(p);
  210. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement