99 lines
1.7 KiB
C
99 lines
1.7 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#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){
|
|
if(queueIsEmpty(q1))
|
|
q1->front = q2->front;
|
|
else
|
|
q1->back->next = q2->front;
|
|
|
|
q1->back = q2->back;
|
|
q1->size += q2->size;
|
|
|
|
q2->front = NULL;
|
|
q2->back = NULL;
|
|
q2->size = 0;
|
|
}
|
|
|
|
void queueClear(queue* q){
|
|
queue_element* tmp = q->front, *tp;
|
|
while(tmp){
|
|
tp = tmp->next;
|
|
free(tmp->element);
|
|
free(tmp);
|
|
tmp = tp;
|
|
}
|
|
|
|
q->front = NULL;
|
|
q->size = 0;
|
|
}
|
|
|
|
void queueFree(queue* q){
|
|
queueClear(q);
|
|
free(q);
|
|
}
|
|
|
|
void* queueTop(queue* q){
|
|
return q->front;
|
|
} |