diff --git a/ex3/main b/ex3/main
new file mode 100755
index 0000000000000000000000000000000000000000..4febc603223aeb464e2605b968d1e575887b5831
Binary files /dev/null and b/ex3/main differ
diff --git a/ex3/main.c b/ex3/main.c
index 2a68350eb3d3133a356f68da555cd56120e9332b..7968300413dbd7698c3fa00ee715e9ab36182317 100644
--- a/ex3/main.c
+++ b/ex3/main.c
@@ -1,6 +1,77 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+
+typedef struct _element { // Elément de liste
+    int data;
+    struct _element* next;
+} element_t;
+
+typedef struct _ddl {
+	element_t* head; 
+	element_t* pos;
+} dll_t;
+
+void free_liste(element_t* liste1){
+    element_t* prec = liste1;
+	element_t* current = liste1;
+	while(current->next != NULL){
+		prec = current;
+		current = current->next;
+		free(prec);
+	}
+	free(current);
+}
+
+dll_t* dll_create(){
+	dll_t* new = malloc(sizeof(dll_t));
+	new->head = NULL;
+	new->pos = NULL;
+	return new;
+}
+
+void dll_print(dll_t* liste){
+	if(liste != NULL){
+		element_t* current = liste->head;
+		while(current != NULL){
+			printf("%d  ", current->data);
+			current = current->next;
+		}
+		printf("\n");
+	}else{
+		printf("Empty");
+	}
+}
+
+void dll_destroy(dll_t* liste){
+	free_liste(liste->head);
+	free(liste->pos);
+	free(liste);
+}
+
+void dll_push(dll_t* liste, int data){
+	element_t* new = malloc(sizeof(element_t));
+	new->data = data;
+	new->next = liste->head;
+	liste->head = new;
+}
+
 int main(){
+	int size, tmp;
+	dll_t* liste = dll_create();
+
+
+	printf("Liste d'entiers : ");
+	scanf("%d", &size);
+
+	while(size > 0){
+		scanf("%d", &tmp);
+		dll_push(liste, tmp);
+		size --;
+	}
+
+	dll_print(liste);
+	dll_destroy(liste);
+
 	return(0);
 }
diff --git a/ex3/main.o b/ex3/main.o
new file mode 100644
index 0000000000000000000000000000000000000000..2c4e18b5bb53f7f92e4c1d5b70ed95570883c8c9
Binary files /dev/null and b/ex3/main.o differ