#include#include typedef int queue_element_t;typedef struct queue_node_s{ queue_element_t element; struct queue_node_s *restp;}queue_node_t;/*Queue front & rear pointer*/typedef struct{ queue_node_t *frontp, *rearp; int size; }queue_t;void add_to_q(queue_t *qp, queue_element_t ele){ /*Keep queue front pointer*/ if(qp->size == 0) { qp->rearp = (queue_node_t*)malloc(sizeof(queue_node_t)); qp->frontp = qp->rearp; } /*Renew queue rear pointer*/ else { qp->rearp->restp = (queue_node_t*)malloc(sizeof(queue_node_t)); qp->rearp = qp->rearp->restp; } qp->rearp->element = ele; qp->rearp->restp = NULL; ++(qp->size);}queue_element_t remove_from_q(queue_t *qp){ queue_node_t *to_freep; queue_element_t ans; to_freep = qp->frontp; ans = to_freep->element; qp->frontp = to_freep->restp; free(to_freep); --(qp->size); if(qp->size == 0) qp->rearp = NULL; return ans; }int main(void){ queue_t queue = {NULL, NULL, 0}; add_to_q(&queue, 100); add_to_q(&queue, 200); add_to_q(&queue, 300); add_to_q(&queue, 400); int i; int sum = queue.size; for(i = 0; i < sum; i++) printf("%d\n", remove_from_q(&queue));}