|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Oct 2006
Messaggi: 170
|
[C] code (unione)
Ho il seguente esercizio da implementare :
Date due code in ingresso a valori interi in ordine crescente, scrivere una funzione che restituisca una terza coda che contenga i valori delle due code disposti in ordine crescente. ed ora inserisco il codice che ho sviluppato, il problema, che orami da un periodo mi perseguita è che crasha, in questo caso eseguendo la funzione unisci_code. Cerco qualcuno che mi dica dove sbaglio. grazie in anticipo. Codice HTML:
/*Date due code in ingresso a valori interi in ordine crescente, scrivere una funzione che restituisca una terza coda che contenga i valori delle due code disposti in ordine crescente.*/ #include<stdio.h> #include<stdlib.h> #define EMPTY 0 #define FULL 100 typedef unsigned int data; typedef enum {true,false} boolean; struct elem{ data d; struct elem *next; }; typedef struct elem elem; struct coda{ int cnt; elem *dietro; elem *avanti; }; typedef struct coda coda; void inizializza(coda *c); void ins_el_coda(coda *c, data el); data del_el_testa(coda *c); data testa(coda *c); boolean empty(const coda *c); boolean full(const coda *c); void unisci_code(coda *c1,coda *c2,coda *c); int main(void){ coda c1,c2,c; int i,valore; data num; /*numero elementi da inserire nella coda c1 e nella coda c2*/ inizializza(&c1); inizializza(&c2); inizializza(&c); printf("quanti elementi vuoi inserire nella prima coda?\n"); scanf("%d",&num); /*caricamento coda c1*/ printf("\nCARICAMENTO CODA 1\n\n"); for (i = 1 ; i <= num ; ++i){ if (!full(&c1)){ printf("inserisci elemento = "); scanf("%u",&valore); ins_el_coda(&c1,valore); } else{ printf("Impossibile inserire elemento, coda c1 piena"); break; } } printf("\nquanti elementi vuoi inserire nella seconda coda?\n"); scanf("%d",&num); /*caricamento coda c2*/ printf("\nCARICAMENTO CODA 2\n\n"); for (i = 1 ; i <= num ; ++i){ if (!full(&c2)){ printf("inserisci elemento = "); scanf("%u",&valore); ins_el_coda(&c2,valore); } else{ printf("Impossibile inserire elemento, coda piena"); break; } } unisci_code(&c1,&c2,&c); system("PAUSE"); } void inizializza(coda *c){ c -> cnt = 0; c -> dietro = NULL; c -> avanti = NULL; } void ins_el_coda(coda *c,data el){ elem *p; p = malloc(sizeof(elem)); p -> d=el; p -> next = NULL; if (!empty(c)){ c -> dietro -> next = p; c -> dietro = p; } else c -> avanti = c -> dietro = p; c -> cnt++; } data del_el_testa(coda *c){ data dato; elem *p; dato = c -> avanti -> d; c -> avanti = c -> avanti -> next; c -> cnt--; free(p); return dato; } data testa(coda *c){ return(c -> avanti -> d); } boolean empty(const coda *c){ return((boolean) (c -> cnt == EMPTY)); } boolean full(const coda *c){ return((boolean) (c -> cnt == FULL)); } void unisci_code(coda *c1,coda *c2,coda *c) { while(!full(c1) && !full(c2)) { if (testa(c1) <= testa(c2)) ins_el_coda(&c, del_el_testa(c1)); else ins_el_coda(&c, del_el_testa(c2)); } while(!full(c1)) ins_el_coda(&c, del_el_testa(c1)); while(!full(c2)) ins_el_coda(&c, del_el_testa(c2)); } |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:44.



















