typedef struct Queue
{
int tail; // index of the last element
int head; // index of the first element
int capacity;
char** head_pt;
} Queue;
void allocQueue(Queue* queue)
{
assert(queue->capacity != 0);
queue->head_pt = (char**)malloc(sizeof(char*) * queue->capacity);
for (int i = 0; i < queue->capacity; i++)
{
queue->head_pt[i] = (char*)malloc(sizeof(char) * QUEUE_ELEM_SIZE);
if (!queue->head_pt[i]) {
printf("Queue Error: failed reallocating memory for a string");
exit(1);
}
}
}
void enQueue(Queue* queue, char* data)
{
if (queue->head == -1 && queue->tail == -1) {
queue->head = 0;
queue->tail = 0;
}
if(queue->tail == queue->capacity)
{
resizeQueue(queue);
}
strcpy(queue->head_pt[queue->tail], data);
queue->tail++;
}
void resizeQueue(Queue* queue)
{
printf("RESIZE\n");
queue->capacity *= 2;
queue->head_pt = (char**) realloc(queue->head_pt, queue->capacity);
if (!queue->head_pt) {
printf("Queue Error: failed reallocating memory for head");
exit(1);
}
for(int i = queue->tail; i < queue->capacity; i++) {
queue->head_pt[i] = (char*)malloc(sizeof(char) * QUEUE_ELEM_SIZE);
if (!queue->head_pt[i]) {
printf("Queue Error: failed reallocating memory for a string");
exit(1);
}
}
}
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct Queue
{
int tail; // index of the last element
int head; // index of the first element
int capacity;
char** head_pt;
} Queue;
void allocQueue(Queue* queue)
{
assert(queue->capacity != 0);
queue->head_pt = (char**)malloc(sizeof(char*) * queue->capacity);
for (int i = 0; i < queue->capacity; i++)
{
queue->head_pt[i] = (char*)malloc(sizeof(char) * QUEUE_ELEM_SIZE);
if (!queue->head_pt[i]) {
printf("Queue Error: failed reallocating memory for a string");
exit(1);
}
}
}
void resizeQueue(Queue* queue)
{
printf("RESIZE\n");
queue->capacity *= 2;
queue->head_pt = (char**) realloc(queue->head_pt, queue->capacity);
if (!queue->head_pt) {
printf("Queue Error: failed reallocating memory for head");
exit(1);
}
for(int i = queue->tail; i < queue->capacity; i++) {
queue->head_pt[i] = (char*)malloc(sizeof(char) * QUEUE_ELEM_SIZE);
if (!queue->head_pt[i]) {
printf("Queue Error: failed reallocating memory for a string");
exit(1);
}
}
}
void enQueue(Queue* queue, char* data)
{
if (queue->head == -1 && queue->tail == -1) {
queue->head = 0;
queue->tail = 0;
}
if(queue->tail == queue->capacity)
{
resizeQueue(queue);
}
strcpy(queue->head_pt[queue->tail], data);
queue->tail++;
}
int main(void) {
printf("------test Queue-----\n");
Queue queue = {
.capacity = 5,
.tail = -1,
.head = -1,
};
allocQueue(&queue);
assert(queue.head_pt != NULL);
printf("PASSED: allocating memory\n");
char string [] = "a,b,c,d,e,f,g,h,i,j,k,";
for (char* data = strtok(string, ","); data != NULL; data = strtok(NULL, ",") ) {
enQueue(&queue, data);
// printQueue(&queue);
}
return 0
}
int main(void) {
printf("------test Queue-----\n");
Queue queue = {
.capacity = 5,
.tail = -1,
.head = -1,
};
allocQueue(&queue);
assert(queue.head_pt != NULL);
printf("PASSED: allocating memory\n");
char string [] = "a,b,c,d,e,f,g,h,i,j,k,";
for (char* data = strtok(string, ","); data != NULL; data = strtok(NULL, ",") ) {
enQueue(&queue, data);
// printQueue(&queue);
}
return 0;
}