Commit 2f46078
Changed files (3)
assignments
assignments/01/priority_queue.c
@@ -1,5 +1,6 @@
-#include "priority_queue.h"
+#include <stdio.h>
#include <stdlib.h>
+#include "priority_queue.h"
PriorityQueue *initialize() {
PriorityQueue *queue = malloc(sizeof(PriorityQueue));
@@ -29,19 +30,35 @@ void add(PriorityQueue *queue, Node *node) {
}
Node *tmp = queue->head;
+ Node *prev = NULL;
while(tmp != NULL) {
if (tmp->data > node->data) {
- tmp->next = node;
- if (tmp == queue->head) {
+ node->next = tmp;
+ if (tmp == queue->head)
queue->head = node;
- }
+ else if (prev != NULL)
+ prev->next = node;
break;
}
+ prev = tmp;
tmp = tmp->next;
}
}
Node *delete_min(PriorityQueue *queue) {
- return queue->head;
+ Node *tmp = queue->head;
+ queue->head = tmp->next;
+ return tmp;
+}
+
+void inspect(PriorityQueue *queue) {
+ Node *tmp = queue->head;
+
+ printf("*******\n");
+ while(tmp) {
+ printf("%d\n", tmp->data);
+ tmp = tmp->next;
+ }
+ printf("*******\n");
}
assignments/01/priority_queue.h
@@ -11,9 +11,9 @@ typedef struct {
int size;
} PriorityQueue;
-
PriorityQueue *initialize();
Node *create_node(int priority, int data);
int count(PriorityQueue *queue);
void add(PriorityQueue *queue, Node *node);
Node *delete_min(PriorityQueue *queue);
+void inspect(PriorityQueue *queue);
assignments/01/priority_queue_test.c
@@ -42,13 +42,15 @@ Ensure(PriorityQueue, removes_the_node_with_the_lowest_priority){
Node *max = create_node(3, 300);
add(queue, max);
+ inspect(queue);
add(queue, min);
+ inspect(queue);
add(queue, mid);
+ inspect(queue);
assert_that(count(queue), is_equal_to(3));
-
- Node *deleted = delete_min(queue);
- assert_that(deleted, is_equal_to(min));
+ assert_that(delete_min(queue), is_equal_to(min));
+ assert_that(queue->head, is_equal_to(mid));
free(max);
free(mid);