Non hai specificato che tipo di turnazione devi fare. In generale, presta attenzione a due cose:
- una turnazione lavorativa è soggetta a regole e vincoli (anche legali)
- non ha senso fare turnazioni a caso
Per cominciare puoi provare a fare i turni con Excel/Libreoffice giusto per capire come si sviluppa a mano la cosa.
Dal punto di vista grafico puoi immaginare la turnazione come un diagramma di Gantt, in cui ogni segmento del diagramma è un turno coperto da 1 o più persone. Al termine del turno il diagramma continua con un altro lavoratore, fino a coprire il periodo (settimana o mese).
Ogni volta che aggiungi un segmento, devi incrementare le ore lavorate e considerare i vincoli (ad esempio giorni di riposo, ferie/permessi, malattia, legge 104, ecc.).
Se vuoi farlo in C, a grandi linee ti serve un vettore di strutture per ogni lavoratore, in cui memorizzi i dati (ore contrattuali, eventuali vincoli tipo legge 104, ferie/permessi, ecc).
Poi un altro vettore di strutture che rappresenta il segmento del diagramma di Gantt (turno).
Scegli con chi cominciare il turno, verifichi i vincoli e se non ci sono impedimenti assegni il turno a quel lavoratore: incrementi il conteggio delle ore lavorate e passi al lavoratore successivo. Se il controllo dei vincoli fallisce (ad esempio, per quel giorno ha chiesto un permesso), passi al lavoratore successivo nella lista. Se tutti i lavoratori non passano il controllo dei vincoli per quel giorno, hai un grosso problema...
Come traccia direi che basta.
Puoi fare anche una macro con Excel/Libreoffice: il primo foglio è la turnazione finale. Un secondo foglio sono i dati dei lavoratori. Un terzo foglio sono le richieste tipo ferie. Nel foglio 1 metti nella prima riga in alto le date con i turni. I fogli 2 e 3 hanno in colonna A i nomi dei lavoratori, con i vincoli disposti nelle righe. Nel foglio 3 metti ferie/malattia/permessi. La macro riempie il foglio 1 prendendo i dati dal foglio 2 e controllando sul foglio 3.