diff --git a/main b/main
new file mode 100755
index 0000000000000000000000000000000000000000..72161bd970158c588ecf4a349ae4cabf5d7bd4fd
Binary files /dev/null and b/main differ
diff --git a/main.c b/main.c
new file mode 100644
index 0000000000000000000000000000000000000000..658998cb29ee858d6cce9f455dda4d807b5c3cd6
--- /dev/null
+++ b/main.c
@@ -0,0 +1,18 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "queue.h"
+
+int main(){
+	queue_t* my_queue = init_queue();
+
+	enqueue(my_queue, 42);
+	printf("One node added, size = %d\n",my_queue->size);
+	enqueue(my_queue, 43);
+	enqueue(my_queue, 44);
+
+	printf("First node added had value %d\n", dequeue(my_queue));
+	printf("Second node added had value %d\n", dequeue(my_queue));
+	
+
+	return 0;
+}
\ No newline at end of file
diff --git a/main.o b/main.o
new file mode 100755
index 0000000000000000000000000000000000000000..f2dc29016ae6f25dce17d2d7723210009dde7410
Binary files /dev/null and b/main.o differ
diff --git a/makefile b/makefile
new file mode 100644
index 0000000000000000000000000000000000000000..70d5569ecec6c87031ad91d53a7631062445ef3d
--- /dev/null
+++ b/makefile
@@ -0,0 +1,6 @@
+all:
+	gcc main.c queue.c -o main
+	./main
+
+clean:
+	rm *.o
\ No newline at end of file
diff --git a/queue.c b/queue.c
new file mode 100644
index 0000000000000000000000000000000000000000..234c5f223c71fcbbccf9ee4ea26ccb8412b4c6d2
--- /dev/null
+++ b/queue.c
@@ -0,0 +1,67 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "queue.h"
+
+
+typedef struct node{
+  struct node* next;
+  int value;
+} node_t;
+
+typedef struct queue{
+  struct node* tail;
+  int size;
+} queue_t;
+
+
+queue_t* init_queue(){
+	queue_t* newQueue = (queue_t*)malloc(sizeof(queue_t));
+	newQueue->size = 0;
+	newQueue->tail = NULL;
+	return newQueue;
+}
+
+int enqueue(queue_t* q, int val){
+	struct node *newNode = (struct node*) malloc(sizeof(struct node));
+	if(!newNode) return  -1;
+	newNode->value = val;
+
+	if(q->tail == NULL){
+	    newNode->next = newNode;
+	    q->tail = newNode;
+	}
+	else{
+	    newNode->next = q->tail->next;
+		q->tail->next = newNode;
+	}
+
+
+	q->size ++;
+
+	return 0;
+}
+
+int dequeue(queue_t* q){
+	int tbr = q->tail->value; //to be returned
+	if(q->size == 1){
+	    free(q->tail);
+	    q->tail = NULL;
+	    q->size--;
+	    return tbr;
+	}else{
+	    struct node *cur = q->tail;
+	    for(int i = 0; i < q->size - 1; i++){
+	        cur = cur->next;
+	    }
+	    struct node *old = cur->next;
+	    cur->next = old->next;
+	    q->tail = cur;
+	    free(old);
+	    free(cur);
+	    q->size --;
+	    return tbr;
+
+	}
+
+	return 0;
+}
\ No newline at end of file
diff --git a/queue.h b/queue.h
new file mode 100644
index 0000000000000000000000000000000000000000..f63f4c54b4a909295d6560c6abdccccec19c9f36
--- /dev/null
+++ b/queue.h
@@ -0,0 +1,14 @@
+#ifndef QUEUE_H
+#define QUEUE_H
+
+
+typedef struct node node_t;
+
+typedef struct queue queue_t;
+
+queue_t* init_queue();
+
+int enqueue(queue_t* q, int val);
+int dequeue(queue_t* q);
+
+#endif