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