Last active
July 4, 2022 20:40
-
-
Save nuoxoxo/15ac4fc4a453baa633ea8dc11180915b to your computer and use it in GitHub Desktop.
Deque Implementation in C
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifndef DEQUE_H | |
# define DEQUE_H | |
# include "stdlib.h" | |
# include "stdio.h" | |
typedef struct s_deque | |
{ | |
struct s_deque_node *head; | |
struct s_deque_node *tail; | |
int len; | |
} t_deque; | |
typedef struct s_deque_node | |
{ | |
struct s_deque_node *prev; | |
struct s_deque_node *next; | |
void *content; | |
} t_deque_node; | |
t_deque *deque_init(void); | |
void deque_push_front(t_deque *__, void *_); | |
void deque_push_back(t_deque *__, void *_); | |
void *deque_pop_front(t_deque *_); | |
void *deque_pop_back(t_deque *_); | |
int deque_is_empty(t_deque *_); | |
int deque_len(t_deque *_); | |
void deque_print(t_deque *_); | |
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "deque.h" | |
void *deque_pop_back(t_deque* dq) | |
{ | |
if (deque_is_empty(dq)) | |
{ | |
return (NULL); | |
} | |
t_deque_node *temp; | |
void *cont; | |
temp = dq->tail; | |
dq->tail = temp->prev; | |
if (!dq->tail) | |
{ | |
dq->head = NULL; | |
} | |
else | |
{ | |
dq->tail->next = NULL; | |
} | |
cont = temp->content; | |
free(temp); | |
dq->len--; | |
return (cont); | |
} | |
void *deque_pop_front(t_deque *dq) | |
{ | |
if (deque_is_empty(dq)) | |
{ | |
return (NULL); | |
} | |
t_deque_node *temp; | |
void *cont; | |
temp = dq->head; | |
dq->head = temp->next; | |
if (!dq->head) | |
{ | |
dq->tail = NULL; | |
} | |
else | |
{ | |
dq->head->prev = NULL; | |
} | |
cont = temp->content; | |
free(temp); | |
dq->len--; | |
return (cont); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "deque.h" | |
void deque_push_back(t_deque *dq, void *content) | |
{ | |
t_deque_node *node; | |
node = malloc(sizeof(t_deque_node)); | |
if (!node) | |
return ; | |
node->content = content; | |
node->prev = dq->tail; | |
node->next = NULL; | |
if (deque_is_empty(dq)) | |
{ | |
dq->head = node; | |
} | |
else | |
{ | |
dq->tail->next = node; | |
} | |
dq->tail = node; | |
dq->len++; | |
} | |
void deque_push_front(t_deque *dq, void *content) | |
{ | |
t_deque_node *node; | |
node = malloc(sizeof(t_deque_node)); | |
if (!node) | |
return ; | |
node->content = content; | |
node->next = dq->head; | |
node->prev = NULL; | |
if (deque_is_empty(dq)) | |
{ | |
dq->tail = node; | |
} | |
else | |
{ | |
dq->head->prev = node; | |
} | |
dq->head = node; | |
dq->len++; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "deque.h" | |
t_deque *deque_init(void) | |
{ | |
t_deque *dq; | |
dq = malloc(sizeof(t_deque)); | |
if (!dq) | |
return (NULL); | |
dq->head = NULL; | |
dq->tail = NULL; | |
dq->len = 0; | |
return (dq); | |
} | |
int deque_is_empty(t_deque *dq) | |
{ | |
return (!dq->head || !dq->tail); | |
} | |
int deque_len(t_deque *dq) | |
{ | |
return (dq->len); | |
} | |
/// need alt_printf | |
void deque_print(t_deque *dq) | |
{ | |
t_deque_node *node; | |
node = dq->head; | |
while (node) | |
{ | |
printf("%d ", *(int*) node->content); | |
node = node->next; | |
} | |
printf("end\n"); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "deque.h" | |
int main() | |
{ | |
t_deque *e; | |
e = deque_init(); | |
int n1 = 2; | |
deque_push_back(e, &n1); | |
int n2 = 4; | |
deque_push_back(e, &n2); | |
int n3 = 8; | |
deque_push_back(e, &n3); | |
printf("\n"); | |
deque_print(e); | |
printf("head: %i \n", *(int*) (e->head->content)); | |
printf("tail: %i \n", *(int*) (e->tail->content)); | |
printf("len: %i \n", e->len); | |
printf("\n"); | |
deque_print(e); | |
printf("popped: %i \n", *(int*)deque_pop_back(e)); | |
printf("head: %i \n", *(int*) (e->head->content)); | |
printf("tail: %i \n", *(int*) (e->tail->content)); | |
printf("len: %i \n", e->len); | |
printf("\n"); | |
deque_print(e); | |
printf("popped: %i \n", *(int*)deque_pop_back(e)); | |
printf("head: %i \n", *(int*) (e->head->content)); | |
printf("tail: %i \n", *(int*) (e->tail->content)); | |
printf("len: %i \n", e->len); | |
printf("\n"); | |
deque_print(e); | |
printf("\n"); | |
return (0); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment