Ok... so you have a node. Node contains some sort of data, and a Node * to the next node. So when you start both Node head and Node tail will be pointing to NULL. This is a special case. When you enqueue a node when head = NULL then you make a new NULL. Set the data value, and point both head and tail to your new NULL. The next point of any newly enqueued node should be NULL.
When you dequeue you typically point a temp NODE * to head, and set head to head->next. After you are done with the temp NODE delete it.
When you enqueue a node and tail != NULL you create a new node with your data value, set tail->next to that new node, then set tail=tail->next.
I think that is about it... This sounds like a school assignment so I won't write the code for ya, but that might help you understand better....