/* -- l_queue.h -- Tony Givargis Linked list Queue implementation for medium to large memory models. */ #ifndef __l_queue_h__ #define __l_queue_h__ /*---------------------------------------------------------------------------*/ #include /*---------------------------------------------------------------------------*/ /* EL_QueueNode Used by queue functions. */ typedef struct EL_QueueNode { void* element; struct EL_QueueNode* link; } EL_QueueNode; /*---------------------------------------------------------------------------*/ /* EL_Queue Returned by EL_QueueCreate function as the ADT identifier (handle) of a queue. */ typedef struct EL_Queue { EL_QueueNode* head; EL_QueueNode* tail; unsigned int size; /* number of items in the list */ } EL_Queue; /*---------------------------------------------------------------------------*/ /* EL_QueueCreate Creates an empty queue and returns an EL_Queue* ADT to caller. This ADT is passed to subsequent queue functions as the identifier (handle) of this particular queue. Returns EL_Queue* on success, NULL otherwise. O(1) */ EL_Queue* EL_QueueCreate(void); /*---------------------------------------------------------------------------*/ /* EL_QueueDestroy Destroys queue (q). --> O(n) */ void EL_QueueDestroy(EL_Queue* q); /*---------------------------------------------------------------------------*/ /* EL_QueuePush Pushes data (element) onto the queue (q). Retruns data element on success, NULL otherwise. --> O(1) */ void* EL_QueuePush(EL_Queue* q, void* element); /*---------------------------------------------------------------------------*/ /* EL_QueuePop Pops data element from the queue (q). Returns data element on success, NULL otherwise. --> O(1) */ void* EL_QueuePop(EL_Queue* q); /*---------------------------------------------------------------------------*/ /* EL_QueueSize Returns the number of data elements in queue (q). --> O(1) */ #define EL_QueueSize(q) ((q)->size) /*---------------------------------------------------------------------------*/ #endif