diff --git a/queue.c b/queue.c index b2d408c..7759818 100644 --- a/queue.c +++ b/queue.c @@ -1,7 +1,10 @@ #include +#include #include + #include "queue.h" + Queue* create_queue() { Queue* queue = malloc(sizeof(Queue)); queue->size = 0; @@ -23,7 +26,7 @@ int back(Queue* queue) { void enqueue(Queue* queue, int data) { QueueNode* node = malloc(sizeof(QueueNode)); node->data = data; - node->next = queue->head; + node->next = NULL; if (is_empty(queue)) { queue->head = queue->tail = node; } else { @@ -44,11 +47,22 @@ int dequeue(Queue* queue) { } void destroy_queue(Queue* queue) { - return; + QueueNode* current = queue->head; + while (current) { + QueueNode* next = current->next; + free(current); + current = next; + } + free(queue); } void print_queue(Queue* queue) { - return; + QueueNode* current = queue->head; + while (current) { + printf("%d ", current->data); + current = current->next; + } + printf("\n"); } size_t size(Queue* queue) { diff --git a/queue_test.c b/queue_test.c index b65db3b..9cfcd13 100644 --- a/queue_test.c +++ b/queue_test.c @@ -11,12 +11,12 @@ int test_create_queue() { CHECK(assert_equal_int(size(queue), 0)); CHECK(assert_true(is_empty(queue))); destroy_queue(queue); + return 0; } int test_enqueue() { Queue* queue = create_queue(); - enqueue(queue, 1); CHECK(assert_equal_int(size(queue), 1)); CHECK(assert_false(is_empty(queue))); @@ -27,31 +27,35 @@ int test_enqueue() { CHECK(assert_equal_int(size(queue), 2)); CHECK(assert_equal_int(front(queue), 1)); CHECK(assert_equal_int(back(queue), 2)); + destroy_queue(queue); + return 0; } int test_dequeue() { - Queue* queue = create_queue(); - - enqueue(queue, 1); - dequeue(queue); - CHECK(assert_true(is_empty(queue))); - - for (int i = 1; i <= 10; i++) { - enqueue(queue, i); - } - - dequeue(queue); - dequeue(queue); - CHECK(assert_equal_int(size(queue), 8)); - CHECK(assert_equal_int(front(queue), 3)); - CHECK(assert_equal_int(back(queue), 10)); - return 0; + Queue* queue = create_queue(); + enqueue(queue, 1); + dequeue(queue); + CHECK(assert_true(is_empty(queue))); + + for (int i = 1; i <= 10; i++) { + enqueue(queue, i); + } + + dequeue(queue); + dequeue(queue); + CHECK(assert_equal_int(size(queue), 8)); + CHECK(assert_equal_int(front(queue), 3)); + CHECK(assert_equal_int(back(queue), 10)); + destroy_queue(queue); + + return 0; } int main() { run_test("test_create_queue", test_create_queue); run_test("test_enqueue", test_enqueue); run_test("test_dequeue", test_dequeue); + return 0; }