diff --git a/stack.c b/stack.c
index 1e331d9d7c88b04e9ebe8f06f97751e638cc237e..fc4205b03f83906530ccc57a6e49d70d1683bb95 100644
--- a/stack.c
+++ b/stack.c
@@ -1,6 +1,6 @@
-#include "stack.h"
-#include <stdio.h>
 #include <stdlib.h>
+#include "stack.h"
+
 
 #define DEFAULT_CAPACITY 4
 
@@ -17,6 +17,18 @@ void stack_destroy(stack *s) {
     s->top      = -1;
 }
 
+void stack_push(stack *s, int value)
+{
+    if (s->top == s->capacity-1)
+    {
+        assert(s->data = realloc(s->capacity * 2 * sizeof(int)));
+        s->capacity=s->capacity * 2;
+    }
+
+    s->top++;
+    s->data[s->top] = value;
+}
+
 void stack_pop(stack *s, int *value) {
     if (stack_is_empty(*s)) {
         return;
@@ -62,3 +74,4 @@ void stack_clone(stack s, stack *clone) {
 int get_length(stack s) {
     return s.top + 1;
 }
+
diff --git a/stack.h b/stack.h
index 5ee3740c9a8445a8fc3dccc9b12b7b7469ecbb8d..010bfdc0153b05dbe62b975fe51830c6ac26f26e 100644
--- a/stack.h
+++ b/stack.h
@@ -1,11 +1,13 @@
 #ifndef _STACK_H_
 #define _STACK_H_
 
+
 typedef struct _stack {
     int *data;
     int capacity;
     int top;
 } stack;
+void stack_push(stack *s, int val);
 
 void stack_init(stack *stack);