Skip to content

Instantly share code, notes, and snippets.

@LucasMagnum
Last active September 10, 2018 13:15
Show Gist options
  • Save LucasMagnum/ce6047dfcda3850ee03f1129e39dbfb7 to your computer and use it in GitHub Desktop.
Save LucasMagnum/ce6047dfcda3850ee03f1129e39dbfb7 to your computer and use it in GitHub Desktop.
queue-linkedlist.c
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
struct Node {
int value;
struct Node *next;
};
struct Node* newNode(int value){
struct Node *node = (struct Node*)malloc(sizeof(struct Node));
node->value = value;
node->next = NULL;
return node;
}
struct Queue {
struct Node *head;
struct Node *tail;
};
struct Queue* newQueue() {
struct Queue *queue = (struct Queue*)malloc(sizeof(struct Queue));
queue->head = NULL;
queue->tail = NULL;
return queue;
}
void enqueue(struct Queue *queue, int value){
struct Node *node = newNode(value);
if (queue->head == NULL) {
queue->head = node;
} else {
queue->tail->next = node;
}
queue->tail = node;
}
bool isEmpty(struct Queue *queue) {
if (queue->head == NULL) {
return true;
}
return false;
}
int dequeue(struct Queue *queue) {
if (isEmpty(queue)) {
printf("Can't dequeue this queue\n");
exit(EXIT_FAILURE);
}
struct Node *node = queue->head;
queue->head = node->next;
if (isEmpty(queue)) {
queue->tail = NULL;
}
if (node != NULL) {
int value = node->value;
free(node);
return value;
}
exit(EXIT_FAILURE);
}
int main() {
struct Queue *queue = newQueue();
enqueue(queue, 1);
enqueue(queue, 2);
enqueue(queue, 3);
while (!isEmpty(queue)) {
printf("Dequeueing %d \n", dequeue(queue));
}
exit(EXIT_SUCCESS);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment