summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-06-15 22:13:15 -0600
committermo khan <mo.khan@gmail.com>2020-06-15 22:13:15 -0600
commit2f460787b2dd6130507c1da1123cd4f029cefce0 (patch)
treeb8a84281ff43c78c72e6ecb9bf5841cf0c32b002
parent473b0f0761845a09900278c5dc4a570fd7321614 (diff)
Add function to inspect queue
-rw-r--r--assignments/01/priority_queue.c27
-rw-r--r--assignments/01/priority_queue.h2
-rw-r--r--assignments/01/priority_queue_test.c8
3 files changed, 28 insertions, 9 deletions
diff --git a/assignments/01/priority_queue.c b/assignments/01/priority_queue.c
index 0b57d50..aa7fb6b 100644
--- a/assignments/01/priority_queue.c
+++ b/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");
}
diff --git a/assignments/01/priority_queue.h b/assignments/01/priority_queue.h
index 6d20149..5cb48b9 100644
--- a/assignments/01/priority_queue.h
+++ b/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);
diff --git a/assignments/01/priority_queue_test.c b/assignments/01/priority_queue_test.c
index 4984967..07318d6 100644
--- a/assignments/01/priority_queue_test.c
+++ b/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);