Commit 15db180
Changed files (3)
src
01
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);