Skip to content

Instantly share code, notes, and snippets.

@kroggen
Created April 28, 2017 18:54
Show Gist options
  • Save kroggen/5fc7380d30615b2e70fcf9c7b69997b6 to your computer and use it in GitHub Desktop.
Save kroggen/5fc7380d30615b2e70fcf9c7b69997b6 to your computer and use it in GitHub Desktop.
Simple implementation of a queue using linked list in C
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int val;
struct node *next;
} node_t;
void enqueue(node_t **head, int val) {
node_t *new_node = malloc(sizeof(node_t));
if (!new_node) return;
new_node->val = val;
new_node->next = *head;
*head = new_node;
}
int dequeue(node_t **head) {
node_t *current, *prev = NULL;
int retval = -1;
if (*head == NULL) return -1;
current = *head;
while (current->next != NULL) {
prev = current;
current = current->next;
}
retval = current->val;
free(current);
if (prev)
prev->next = NULL;
else
*head = NULL;
return retval;
}
void print_list(node_t *head) {
node_t *current = head;
while (current != NULL) {
printf("%d\n", current->val);
current = current->next;
}
}
int main() {
node_t *head = NULL;
int ret;
enqueue(&head, 11);
enqueue(&head, 22);
enqueue(&head, 33);
enqueue(&head, 44);
print_list(head);
while ((ret=dequeue(&head)) > 0) {
printf("dequeued %d\n", ret);
}
printf("done. head=%p\n", head);
return 0;
}
@kroggen
Copy link
Author

kroggen commented Apr 28, 2017

You can change it to hold pointers instead of integers

@Mapagmataas1331
Copy link

Mapagmataas1331 commented Jan 25, 2023

#include <stdio.h> 
#include <stdlib.h> 

typedef struct elem {
    int Data;
    struct elem *next;
} TElem;

TElem *createElem(int i) {
    TElem *newElem = malloc(sizeof(TElem));
    newElem -> Data = i;
    newElem -> next = NULL;
    return newElem;
}

void addToQ(TElem *newElem, TElem **Head, TElem **Tail) {
    newElem -> next = *Head;
    *Head = newElem;
    if (newElem -> next == NULL) {
        *Tail = newElem;
    }
}

void getQ(TElem *Head) {
    TElem *temp = Head;
    while (temp != NULL) {
        printf("element %d\n", temp -> Data);
        temp = temp -> next;
    }
}

int main() {
    TElem *Head = NULL;
    TElem *Tail = NULL;
    for (int i = 0; i < 10; i++) {
        addToQ(createElem(i), &Head, &Tail);
    }
    getQ(Head);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment