diff options
| author | mo khan <mo.khan@gmail.com> | 2020-06-17 21:15:55 -0600 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-06-17 21:15:55 -0600 |
| commit | 0e02f8d12bbbf8ffc336946785dafda9b4f8f65c (patch) | |
| tree | 9e75b260e7cbbb614dcf195fdddbd7d01d6cceb2 /assignments | |
| parent | 1d0cd780f29e643fbc7693503259c16f7d0f7e19 (diff) | |
Collapse priority_queue into a single file
Diffstat (limited to 'assignments')
| -rw-r--r-- | assignments/01/01_a_priority_queue.rb | 34 | ||||
| -rw-r--r-- | assignments/01/priority_queue.c | 78 | ||||
| -rw-r--r-- | assignments/01/priority_queue.h | 20 | ||||
| -rw-r--r-- | assignments/01/priority_queue_test.c | 90 |
4 files changed, 88 insertions, 134 deletions
diff --git a/assignments/01/01_a_priority_queue.rb b/assignments/01/01_a_priority_queue.rb deleted file mode 100644 index cb5f208..0000000 --- a/assignments/01/01_a_priority_queue.rb +++ /dev/null @@ -1,34 +0,0 @@ -require 'bundler/inline' - -gemfile do - source 'https://rubygems.org' - - gem 'minitest' -end - -require 'minitest/autorun' - -=begin -Describe the meaning of the essential methods `add(x)`, `deleteMin()`, and `size()` that are supported by the priority queue interface. -Implement those methods using a singly-linked list. -Analyze the running time of the `add(x)` and `deletMin()` operations based on this implementation. -=end - -class Example < Minitest::Test - def dyck_word?(stack) - sum = 0 - stack.each do |item| - return if sum.negative? - sum += item - end - true - end - - def test_valid_word - assert dyck_word?([1, -1, 1, -1]) - end - - def test_invalid_word - refute dyck_word?([1, -1, -1, 1]) - end -end diff --git a/assignments/01/priority_queue.c b/assignments/01/priority_queue.c deleted file mode 100644 index 69c00d6..0000000 --- a/assignments/01/priority_queue.c +++ /dev/null @@ -1,78 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include "priority_queue.h" - -// https://en.wikipedia.org/wiki/Priority_queue -PriorityQueue *initialize() { - PriorityQueue *queue = malloc(sizeof(PriorityQueue)); - queue->size = 0; - queue->head = NULL; - return queue; -} - -Node *create_node(int priority, int data) { - Node *node = malloc(sizeof(Node)); - node->priority = priority; - node->data = data; - node->next = NULL; - return node; -} - -// This function is constant time O(1) -int size(PriorityQueue *queue) { - return queue->size; -} - -// This function is linear time O(n) -void add(PriorityQueue *queue, Node *node) { - queue->size++; - - if (queue->head == NULL) { - queue->head = node; - return; - } - - Node *tmp = queue->head; - Node *prev = NULL; - - while(tmp != NULL) { - if (tmp->data > node->data) { - node->next = tmp; - if (tmp == queue->head) - queue->head = node; - else if (prev != NULL) - prev->next = node; - break; - } - prev = tmp; - tmp = tmp->next; - } -} - -// This function is constant time O(1) -Node *delete_min(PriorityQueue *queue) { - Node *tmp = queue->head; - queue->head = tmp->next; - return tmp; -} - -void inspect(PriorityQueue *queue) { - Node *tmp = queue->head; - - while(tmp) { - printf("%d\n", tmp->data); - tmp = tmp->next; - } -} - -void destroy(PriorityQueue *queue) { - Node *current = queue->head; - Node *tmp; - - while(current) { - tmp = current, current = current->next; - - if (tmp) free(tmp); - } - free(queue); -} diff --git a/assignments/01/priority_queue.h b/assignments/01/priority_queue.h deleted file mode 100644 index 8406e77..0000000 --- a/assignments/01/priority_queue.h +++ /dev/null @@ -1,20 +0,0 @@ -struct node { - int priority; - int data; - struct node *next; -}; - -typedef struct node Node; - -typedef struct { - Node *head; - int size; -} PriorityQueue; - -PriorityQueue *initialize(); -Node *create_node(int priority, int data); -int size(PriorityQueue *queue); -void add(PriorityQueue *queue, Node *node); -Node *delete_min(PriorityQueue *queue); -void inspect(PriorityQueue *queue); -void destroy(PriorityQueue *queue); diff --git a/assignments/01/priority_queue_test.c b/assignments/01/priority_queue_test.c index 210d9b6..f754c33 100644 --- a/assignments/01/priority_queue_test.c +++ b/assignments/01/priority_queue_test.c @@ -1,8 +1,6 @@ #include <cgreen/cgreen.h> #include <string.h> -#include "priority_queue.h" - /* Implement the methods of the priority queue interface using a singly-linked list. @@ -12,6 +10,94 @@ Implement the methods of the priority queue interface using a singly-linked list Analyze the running time of the `add(x)` and `deletMin()` operations based on this implementation. */ +struct node { + int priority; + int data; + struct node *next; +}; + +typedef struct node Node; + +typedef struct { + Node *head; + int size; +} PriorityQueue; + + +// https://en.wikipedia.org/wiki/Priority_queue +static PriorityQueue *initialize() { + PriorityQueue *queue = malloc(sizeof(PriorityQueue)); + queue->size = 0; + queue->head = NULL; + return queue; +} + +static Node *create_node(int priority, int data) { + Node *node = malloc(sizeof(Node)); + node->priority = priority; + node->data = data; + node->next = NULL; + return node; +} + +// This function is constant time O(1) +static int size(PriorityQueue *queue) { + return queue->size; +} + +// This function is linear time O(n) +static void add(PriorityQueue *queue, Node *node) { + queue->size++; + + if (queue->head == NULL) { + queue->head = node; + return; + } + + Node *tmp = queue->head; + Node *prev = NULL; + + while(tmp != NULL) { + if (tmp->data > node->data) { + node->next = tmp; + if (tmp == queue->head) + queue->head = node; + else if (prev != NULL) + prev->next = node; + break; + } + prev = tmp; + tmp = tmp->next; + } +} + +// This function is constant time O(1) +static Node *delete_min(PriorityQueue *queue) { + Node *tmp = queue->head; + queue->head = tmp->next; + return tmp; +} + +static void inspect(PriorityQueue *queue) { + Node *tmp = queue->head; + + while(tmp) { + printf("%d\n", tmp->data); + tmp = tmp->next; + } +} + +static void destroy(PriorityQueue *queue) { + Node *current = queue->head; + Node *tmp; + + while(current) { + tmp = current, current = current->next; + + if (tmp) free(tmp); + } + free(queue); +} Describe(PriorityQueue); BeforeEach(PriorityQueue){ } |
