Ho provato il codice, e sinceramente non so nemmeno come a te ti si possa compilare. Non so se il forum ha per sbaglio tolto dalla tua risposta delle parti di codice che usavano le angolari (< >), ogni tanto accade su alcuni siti, perché dal tuo codice manca un casting opportuno quando vai a passare valori di determinate variabili ad altre.
Nel tuo codice un uso che non da problemi, ma che in altri potrebbe portare ad errori non segnalati dal compilatore, è il non castare esplicitamente il puntatore void* ritornato dalle funzioni malloc al tipo di puntatore che deve essere assegnato nella variabile voluta (e.g. nel metodo "newQueue" manca un cast esplicito al tipo c_queue* quando ritorno un void* da malloc, che sarebbe meglio scrivere). Se al momento stai scrivendo codice in C, ti dovrai limitare a fare il casting tramite parentesi, quindi scritto correttamente: q = (c_queue*) malloc(sizeof(struct c_queue));
Altri due piccoli consigli prima di passare all'errore menzionato da te: mi ha confuso molto (e sicuramente confonderà te in futuro nel caso andassi a rileggere il codice dopo molto tempo) il fatto che hai definito un puntatore a "c_queue" con il nome "queue", usandolo per esempio come valore di ritorno della funzione newQueue. Ovviamente non hai fatto nulla di sbagliato/erroneo a livello di codice, però se devi ritornare un puntatore a qualcosa, bè, meglio far vedere quella stellina nel tuo codice, è più chiaro e non costringi te e altri programmatori a vedere ogni volta la definizione delle struct che usano.
Poi un problema che forse ancora non hai avuto modo di entrarci in contatto e che nel tuo codice non risulta in problemi( ma che un giorno sicuramente ti affliggerà se non correggi subito): nei tuoi file header (.h) non usi niente per prevenire la duplicazione del codice del file.
Per vedere come risolvere il problema ecco qui un link:
http://stackoverflow.com/questions/1653958/why-are-ifndef-and-define-used-in-c-header-files (se il tuo compilatore te lo permette, sarebbe ancora meglio usare all'inizio del file header #pragma once, che fa le stesse cose ma in automatico).
Infine, la soluzione dell'operatore freccia: basta semplicemente che sposti le definizioni di c_queue e node dal file .c al file .h . Dovresti sempre mettere le definizioni delle struct all'interno del file .h se poi quelle struct verranno usate all'esterno del file stesso.
Spero di esserti stato utile.
(P.s. consiglio per tuoi futuri thread, per far sì che le persone non chiudano subito la tua domanda: oltre a come già detto da un altro utente dovresti mettere tutto il codice necessario che possa riguardare il problema, e dovresti scrivere anche che problemi ti da. Il tuo primo problema lo hai descritto, hai detto che c'era una segmentation fault, ma nel secondo (quello menzionato alla fine) non hai detto che errore ti dava: pensa a noi poveri lettori che ci troviamo di fronte a una domanda simile a "hey meccanico, quella parte della macchina non va, me la puoi aggiustare?". Sii il più completo e esaustivo possibile)