diff options
Diffstat (limited to 'src/02/05')
| -rw-r--r-- | src/02/05/stack.c | 17 | ||||
| -rw-r--r-- | src/02/05/stack.h | 1 | ||||
| -rw-r--r-- | src/02/05/stack_test.c | 1 |
3 files changed, 19 insertions, 0 deletions
diff --git a/src/02/05/stack.c b/src/02/05/stack.c index 18a344a..26ef956 100644 --- a/src/02/05/stack.c +++ b/src/02/05/stack.c @@ -8,6 +8,16 @@ Node *node_init(int data) { return node; } +Node *node_tail(Node *self) { + Node *current = self; + while (current) { + if (current->next == NULL) + return current; + current = current->next; + } + return NULL; +} + Stack *stack_init(int data) { Stack *stack = malloc(sizeof(Stack)); stack->head = node_init(data); @@ -27,3 +37,10 @@ int stack_size(Stack *self) { return count; } + +int stack_peek(Stack *self) { + Node *tail = node_tail(self->head); + if (tail) + return tail->data; + return -1; +} diff --git a/src/02/05/stack.h b/src/02/05/stack.h index 1e7d885..12d78f5 100644 --- a/src/02/05/stack.h +++ b/src/02/05/stack.h @@ -9,3 +9,4 @@ typedef struct { Stack *stack_init(int data); int stack_size(Stack *self); +int stack_peek(Stack *self); diff --git a/src/02/05/stack_test.c b/src/02/05/stack_test.c index 8f1471b..c2ec4c2 100644 --- a/src/02/05/stack_test.c +++ b/src/02/05/stack_test.c @@ -10,6 +10,7 @@ Ensure(Stack, when_pushing_an_item_on_to_a_stack) { Stack *stack = stack_init(10); assert_that(stack_size(stack), is_equal_to(1)); + assert_that(stack_peek(stack), is_equal_to(10)); } TestSuite *stack_tests() { |
