Implementing a queue using a linked-list
Having a separate queue structure

typedef struct {
    node * head;
    node * tail;
} queue;


will bring you several benefits:


Most important, enqueue would take a constant time (vs linear in queue length you have now). 
The client would be relieved from responsibility to maintain the head node.
enqueue doesn't inform the client that it failed the allocation. fprintf is good for the human, but does nothing for the calling routine. Having the queue structure enables you to return an error code.

The specialized utility functions, like enqueue and dequeue should not print anything. They must communicate success/error to the caller, and let it act appropriately.
else in enqueue is redundant.
I don't see why do you #include &lt;string.h&gt;.