From 15db180b1df02c73dc8632e5ae1eb0f29e2dceaa Mon Sep 17 00:00:00 2001 From: mo khan Date: Sun, 5 Jul 2020 13:21:43 -0600 Subject: Improve formatted output --- src/01/06/main.c | 26 ++++++++++---------------- src/01/06/min_stack.c | 21 +++++++++++++++++++++ src/01/06/min_stack.h | 4 ++++ 3 files changed, 35 insertions(+), 16 deletions(-) (limited to 'src/01') diff --git a/src/01/06/main.c b/src/01/06/main.c index 104a000..e5ab439 100644 --- a/src/01/06/main.c +++ b/src/01/06/main.c @@ -2,34 +2,28 @@ #include #include -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; } diff --git a/src/01/06/min_stack.c b/src/01/06/min_stack.c index 816b46d..7567cd6 100644 --- a/src/01/06/min_stack.c +++ b/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"); +} diff --git a/src/01/06/min_stack.h b/src/01/06/min_stack.h index 416a93a..92899c7 100644 --- a/src/01/06/min_stack.h +++ b/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); -- cgit v1.2.3