Commit 15db180

mo khan <mo.khan@gmail.com>
2020-07-05 19:21:43
Improve formatted output
1 parent 3130928
Changed files (3)
src/01/06/main.c
@@ -2,34 +2,28 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-void inspect(Stack *stack)
-{
-  Node *head = stack->head;
-
-  while(head) {
-    printf("\t [%7d]\n", head->data);
-    head = head->next;
-  }
-}
-
 int main(int argc, char *argv[])
 {
-  printf("=== COMP-272 - Assignment 1 - Question 6 ===\n");
-
   Stack *stack = initialize();
 
-  for (int i = 0; i < 10; i++) {
-    int data = rand() % 100;
-    printf("Push: %d\n", data);
+  printf("=== COMP-272 - Assignment 1 - Question 6 ===\n");
+  printf("Pushing:\n==========\n");
+  int n = 25;
+  for (int i = 0; i < n; i++) {
+    int data = rand() % n;
     push(stack, data);
+    printf("Push: %d, Min: %d\n", data, min(stack));
     inspect(stack);
   }
 
+  printf("Popping:\n==========\n");
+  inspect(stack);
   while(size(stack) > 0) {
-    printf("Pop: %d\n", pop(stack));
+    printf("Pop: %d, Min: %d\n", pop(stack), min(stack));
     inspect(stack);
   }
 
+  printf("Bye");
   free(stack);
   return 0;
 }
src/01/06/min_stack.c
@@ -38,6 +38,15 @@ void push(Stack *self, int data) {
   self->size++;
 }
 
+void each(Node *head, Visitor block) {
+  Node *tmp = head;
+
+  while(tmp) {
+    (*block)(tmp);
+    tmp = tmp->next;
+  }
+}
+
 int min(Stack *self) {
   if(self->min)
     return self->min->data;
@@ -73,3 +82,15 @@ int pop(Stack *self) {
   free(current);
   return data;
 }
+
+void print_node(Node *node)
+{
+  printf("[%d]", node->data);
+}
+
+void inspect(Stack *stack)
+{
+  printf("\t");
+  each(stack->head, &print_node);
+  printf("\n");
+}
src/01/06/min_stack.h
@@ -11,8 +11,12 @@ typedef struct {
   int size;
 } Stack;
 
+typedef void (*Visitor)(Node *);
+
 Stack *initialize(void);
 void push(Stack *self, int data);
 int pop(Stack *self);
 int size(Stack *self);
 int min(Stack *self);
+void each(Node *head, Visitor block);
+void inspect(Stack *stack);