#include #include #include "queue.h" queue* newQueue(){ queue* tmp = (queue*)malloc(sizeof(queue)); tmp->size = 0; tmp->toString = NULL; tmp->front = NULL; tmp->back = NULL; return tmp; } void queuePush(queue* q, void* element){ queue_element* qel = (queue_element*)malloc(sizeof(queue_element)); qel->element = element; qel->next = NULL; if(queueIsEmpty(q)){ q->front = qel; q->back = qel; }else{ q->back->next = qel; q->back = qel; } q->size++; } void queuePrint(queue* q){ if(q->toString == NULL){ fprintf(stderr, "TOSTRING NOT DEFINED\n"); return; } queue_element* tmp = q->front; while(tmp){ q->toString(tmp->element); tmp = tmp->next; printf("\n"); } printf("\n"); } void queuePop(queue* q){ if(queueIsEmpty(q)){ fprintf(stderr, "QUEUE IS EMTPY\n"); return; } queue_element* tmp = q->front->next; free(q->front->element); free(q->front); q->front = tmp; q->size--; } bool queueIsEmpty(queue* q){ return q->size == 0; } void queueMerge(queue* q1, queue* q2){ q1->back->next = q2->front; q1->size += q2->size; q2->size = 0; } void queueClear(queue* q){ queue_element* tmp = q->front, *tp; while(tmp){ tp = tmp->next; free(tmp); tmp = tp; } q->front = NULL; q->size = 0; } void queueFree(queue* q){ queueClear(q); free(q); }