Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- /*Realizzare in C le funzioni per la gestione, mediante menĂ¹, delle strutture dati pila e coda mediante lista
- lineare dinamica e generica con [rispettivamente senza] nodo sentinella.*/
- typedef struct
- {int num;}Info;
- /*strutture separate per generalizzazione*/
- struct list
- {
- Info val;
- struct list *next;
- };
- typedef struct list List;
- void push(int,Info*,void **);
- void pop(void **);
- void enqueque(int,Info*,void **);
- void dequeque(void **);
- void visitpila(void *);
- void visitcoda(void *);
- void crealist(void **);
- int main ()
- {
- List *pila,*coda,*pcoda,*ppila;
- int sc=10,x=sizeof(Info);
- Info *dato;
- printf("\nMENU: \n");
- printf("immettere 1 per creare una pila \n");
- printf("immettere 2 per creare una coda \n");
- printf("immettere 3 per funzione push (pila) \n");
- printf("immettere 4 per funzione pop (pila)\n");
- printf("immettere 5 per funzione enqueque (coda) \n");
- printf("immettere 6 per funzione dequeque (coda) \n");
- printf("immettere 7 per visualizzare MENU \n");
- printf("immettere 0 per uscire");
- while(sc!=0)
- {
- printf("\n\n--opzione: ");
- scanf("%d",&sc);
- switch(sc)
- {
- case 1:
- {
- crealist(&pila);
- ppila=pila;
- printf("\n--Pila creata!--\n");
- }break;
- case 2:
- {
- crealist(&coda);
- pcoda=coda;
- printf("\n--Coda creata!--\n");
- }break;
- case 3:
- {
- printf("\ninserire dato: ");
- scanf("%d",&dato->num);
- push(x,dato,&pila);
- visitpila(pila);
- }break;
- case 4:
- {
- pop(&pila);
- visitpila(pila);
- }break;
- case 5:
- {
- printf("\ninserire dato: ");
- scanf("%d",&dato->num);
- enqueque(x,dato,&pcoda);
- visitcoda(coda);
- }break;
- case 6:
- {
- dequeque(&coda);
- visitcoda(coda);
- }break;
- case 7:
- {
- printf("\nMENU: \n");
- printf("immettere 1 per creare una pila \n");
- printf("immettere 2 per creare una coda \n");
- printf("immettere 3 per funzione push (pila) \n");
- printf("immettere 4 per funzione pop (pila)\n");
- printf("immettere 5 per funzione enqueque (coda) \n");
- printf("immettere 6 per funzione dequeque (coda) \n");
- printf("immettere 7 per visualizzare MENU \n");
- printf("immettere 0 per uscire");
- }break;
- }
- }
- return 0;
- }
- void crealist (void **list)
- {
- List *p;
- *list=NULL;
- /*per semplificare la stesura del codice utilizzo uno una testa vuota
- facendo partire i valori dal nodo immediatamente successivo*/
- /*alloca memoria per un nodo*/
- p=calloc(1,sizeof(List));
- /*collega il nodo alla testa*/
- p->next=(List*)*list;
- /*aggiorna head al nuovo nodo*/
- *list=p;
- }
- void visitpila(void *list)
- {
- List *p=(List*)list;
- int i=0;
- while(p->next != NULL)
- {
- printf("\n ||\n \\/\n#%d - %d",i,p->val.num);
- p=p->next;
- i++;
- }
- }
- void visitcoda(void *list)
- {
- List *p=(List*)list;
- int i=0;
- while(p->next != NULL)
- {
- p=p->next;
- printf("\n ||\n \\/\n#%d - %d",i,p->val.num);
- i++;
- }
- }
- void push(int len, Info *dato,void **testa)
- {
- List *p;
- p=calloc(1,sizeof(List));
- memcpy(p,dato,len);
- p->next=(List*)*testa;
- *testa=p;
- }
- void enqueque(int len, Info *dato, void **punt)
- {
- List *p;
- p=calloc(1,sizeof(List));
- memcpy(p,dato,len);
- p->next=((List*)*punt)->next;
- ((List*)*punt)->next=p;
- *punt=p;
- }
- void pop(void **testa)
- {
- List *p;
- p=((List*)*testa)->next;
- free((List*)*testa);
- *testa=p;
- }
- void dequeque(void **punt)
- {
- List *p;
- p=((List*)*punt);
- *punt=((List*)*punt)->next;
- free(p);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement