Ciao a tutti,secondo voi quest'algoritmo è corretto, rispecchia quello che voleva l'esercizio 12.15?
Vi posto il link dell'esercizio ed il mio codice.
DESCRIZIONE ESERCIZIO.
Simulazione di un supermercato:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct cliente {
int numero;
struct cliente *next;
} Cliente;
typedef Cliente *ClientePtr;
int dequeue(ClientePtr *, ClientePtr *);
void unqueue(ClientePtr *, ClientePtr *, int);
int main() {
int arrivi, uscite, i, num = 0;
ClientePtr headPtr = NULL, tailPtr = NULL;
srand(time(NULL));
i = arrivi = 1 + rand() % 4;
uscite = 1 + rand() % 4;
unqueue(&headPtr,&tailPtr, ++num);
arrivi += 1 + rand() % 4;
for (; i <= 720; i += 1) {
if(arrivi == i) {
unqueue(&headPtr,&tailPtr, ++num);
arrivi += 1 + rand() % 4;
}
if(headPtr != NULL && uscite-- == 0) {
printf("Servito il cliente n.%d\n", headPtr->numero);
dequeue(&headPtr,&tailPtr);
uscite = 1 + rand() % 4;
}
}
while (headPtr != NULL) {
printf("Cliente %d rimasto fuori\n", dequeue(&headPtr,&tailPtr));
}
return 0;
}
void unqueue(ClientePtr *headPtr, ClientePtr *tailPtr,int value) {
ClientePtr newPtr;
if((newPtr = malloc(sizeof(Cliente)))) {
newPtr->numero = value;
newPtr->next = NULL;
if(*headPtr == NULL)
*headPtr = newPtr;
else
(*tailPtr)->next = newPtr;
*tailPtr = newPtr;
}
}
int dequeue(ClientePtr *headPtr, ClientePtr *tailPtr) {
int value;
ClientePtr temp;
if(*headPtr != NULL) {
value = (*headPtr)->numero;
temp = *headPtr;
*headPtr = (*headPtr)->next;
}
else
*tailPtr = NULL;
free(temp);
return value;
}