diff --git a/stack.c b/stack.c
index 27469186a0c3fb480eb73d281b64eac8d52ed6bd..222323ad858553aa6c7aff4e90fd664a9712fb85 100644
--- a/stack.c
+++ b/stack.c
@@ -16,3 +16,12 @@ void stack_peek(stack s, int *value){
         *value = s.data[s.top];
     }
 }
+
+void stack_clone(stack s, stack *clone) {
+    clone->top = s.top;
+    clone->capacity = s.capacity;
+    clone->data = malloc(sizeof(int) * s.capacity);
+    for (int i = 0; i <= s.top && i < s.capacity; i++) {
+        clone->data[i] = s.data[i];
+    }
+}
\ No newline at end of file
diff --git a/stack.h b/stack.h
index 8da80c2f2fff5493b622780eb35d4157b1362621..f1bd309920ef229aa8ab3b15325938e0102ff80f 100644
--- a/stack.h
+++ b/stack.h
@@ -10,5 +10,6 @@ typedef struct _stack {
 void stack_init(stack *stack);
 
 void stack_peek(stack s, int *value);
+void stack_clone(stack s, stack *clone);
 
 #endif