summaryrefslogtreecommitdiff
path: root/src/02
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-08-05 21:35:29 -0600
committermo khan <mo.khan@gmail.com>2020-08-05 21:35:29 -0600
commit8ebf2af9526cbc66dfdb1a305cb5d594c19d45b7 (patch)
treeac16b8a393ab8f856841c64fd9b88f4b3523d42f /src/02
parent97628ebac511e3cb9d19921471bbedf180ba4025 (diff)
Implement stack peek
Diffstat (limited to 'src/02')
-rw-r--r--src/02/05/stack.c17
-rw-r--r--src/02/05/stack.h1
-rw-r--r--src/02/05/stack_test.c1
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() {