Commit 0e02f8d

mo khan <mo.khan@gmail.com>
2020-06-18 03:15:55
Collapse priority_queue into a single file
1 parent 1d0cd78
assignments/01/01_a_priority_queue.rb
@@ -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
assignments/01/priority_queue.c
@@ -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);
-}
assignments/01/priority_queue.h
@@ -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);
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){ }
Makefile
@@ -13,8 +13,8 @@ doc : doc/
 run : main
 	./main
 
-main : main.o words_test.o words.o priority_queue.o priority_queue_test.o stack_test.o
-	$(CC) main.o words_test.o words.o priority_queue.o priority_queue_test.o stack_test.o -lcgreen -o main
+main : main.o words_test.o words.o priority_queue_test.o stack_test.o
+	$(CC) main.o words_test.o words.o priority_queue_test.o stack_test.o -lcgreen -o main
 
 main.o : main.c
 	$(CC) -c main.c
@@ -25,9 +25,6 @@ words.o : words.c
 words_test.o : words_test.c
 	$(CC) -c words_test.c
 
-priority_queue.o : assignments/01/priority_queue.c
-	$(CC) -c assignments/01/priority_queue.c
-
 priority_queue_test.o : assignments/01/priority_queue_test.c
 	$(CC) -c assignments/01/priority_queue_test.c