#include #include "queue.h" void enqueue(queue_t *q, local_id id, timestamp_t time) { if( q == NULL ) return; node_t *node = (node_t *) malloc(sizeof(*node)); node->id = id; node->time = time; node->next = NULL; if(q->front == NULL && q->rear == NULL){ q->front = q->rear = node; return; } node_t *current = q->front; node_t *previous = NULL; while(current != NULL) { if( current->time > time || ( current->time == time && id < current->id ) ) { node->next = current; if( previous ) previous->next = node; if( current == q->front ) q->front = node; node = NULL; break; } else { previous = current; current = current->next; } } if( node ) { q->rear->next = node; q->rear = node; node = NULL; } } void dequeue(queue_t *q) { struct Node* temp = q->front; if(q->front == NULL) return; if(q->front == q->rear) q->front = q->rear = NULL; else q->front = q->front->next; free(temp); } node_t *front(queue_t *q) { if( q == NULL ) return NULL; return q->front; } queue_t *queue() { queue_t *q = (queue_t*) malloc(sizeof(*q)); if( q == NULL ) return NULL; q->front = NULL; q->rear = NULL; return q; } void free_queue(queue_t *q) { if( q == NULL ) return; struct Node* temp = q->front; while(temp != NULL) { temp = temp->next; free(temp); } free(q); }