Files
sibsutis/1Y-2H/prog.old/lab3/src/contstruct.c
T
2026-04-25 17:23:04 +07:00

70 lines
1.6 KiB
C

#include "includes.h"
tdQueue* queue_create() {
tdQueue* queue = (tdQueue*)malloc(sizeof(tdQueue));
queue->data = NULL;
queue->size = 0;
queue->capacity = 0;
return queue;
}
void queue_decontruct(tdQueue* queue)
{
int i = 0;
while ((i < queue->size) && (queue->data[i] != NULL)) {
deconstruct_matrix2d(queue->data[i]);
i++;
}
free(queue);
}
bool queue_is_empty(tdQueue* queue)
{
return queue->size == 0;
}
int queue_size(tdQueue* queue)
{
return queue->size;
}
void queue_enqueue(tdQueue* queue, matrix2d* data)
{
if (queue->capacity == queue->size) {
if (queue->capacity) {
queue->capacity = ceil(queue->capacity*sqrt(2));
queue->data = (matrix2d**)realloc(queue->data, sizeof(matrix2d*)*(queue->capacity));
} else {
queue->capacity = ceil(sqrt(2));
queue->data = (matrix2d**)malloc(sizeof(matrix2d*)*(queue->capacity));
}
}
queue->data[queue->size++] = data;
}
matrix2d* queue_dequeue(tdQueue* queue)
{
if (queue->data == NULL) return NULL;
matrix2d* data = queue->data[0];
for (int i = 1; i < queue->size; i++) {
queue->data[i-1] = queue->data[i];
}
queue->size -= 1;
return data;
}
matrix2d* queue_peek(tdQueue* queue)
{
if (queue->data == NULL) return NULL;
matrix2d* data = queue->data[0];
return data;
}
void queue_clear(tdQueue* queue)
{
int i = 0;
while (i < queue->capacity && queue->data[i] != NULL)
deconstruct_matrix2d((matrix2d*) (queue->data)[i++]);
queue->size = 0;
}