- allowed functions : malloc, free
- linked list๋ฅผ ์ฌ์ฉํ์ฌ queue๋ฅผ ๊ตฌํ ํฉ๋๋ค.
- ์๋์ ๊ฐ์ queue.h๋ฅผ ์ฌ์ฉ ํฉ๋๋ค.
typedef struct s_node { void *data; struct s_node *next; } t_node; typedef struct s_queue { unsigned int size; t_node *head; t_node *tail; } t_queue;
- t_queueํ struct๋ฅผ ๋ฐํ ํ๋ ํจ์๋ฅผ ์์ฑํ์ธ์.
- ๋ฐํ๋๋ t_queue๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ์ด๊ธฐํ๋ฅผ ๊ฑฐ์ณ์ผํฉ๋๋ค.
t_queue *queue_init(void);
- t_nodeํ ์๋ก์ด ์์๋ฅผ ์์ฑํ๋ ํจ์๋ฅผ ์์ฑํ์ธ์.
t_node *create_elem(void *data);
- queue์ ๊ฐ์ฅ ๋ค์ data๋ฅผ ๊ฐ๋ ์๋ก์ด ์์๋ฅผ ์์ฑํ๋ ํจ์๋ฅผ ์์ฑํ์ธ์.
- ์ฑ๊ณตํ๋ฉด 1, ์คํจํ๋ฉด 0์ ๋ฐํ ํฉ๋๋ค.
int queue_push(t_queue *queue, void *data);
- queue์ ์๋ ์์์ ๊ฐ์๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ์์ฑํ์ธ์.
int queue_size(t_queue *queue);
- queue์์ ๊ฐ์ฅ ์์ ์๋ ์์๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ์์ฑํ์ธ์.
t_node *queue_front(t_queue *queue);
- queue์์ ๊ฐ์ฅ ์์ ์๋ ์์๋ฅผ ๊บผ๋ด๋ ํจ์๋ฅผ ์์ฑํ์ธ์.
t_node *queue_pop(t_queue *queue);
- queue์ ์์ ์ ์ฒด๋ฅผ ์ญ์ ํ๋ ํจ์๋ฅผ ์์ฑํ์ธ์.
- ์์์ ๋ฐ์ดํฐ๋ free_data๋ฅผ ์ฌ์ฉํด์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํด์ ํด์ผ ํฉ๋๋ค.
void queue_clear(t_queue *queue, void (*free_data)(void *));
- queue์ ์๋ ์์ ์ ์ฒด๋ฅผ ์ญ์ ํ๊ณ queue์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํด์ ํ๋ ํจ์๋ฅผ ์์ฑํ์ธ์.
- ์์์ ๋ฐ์ดํฐ๋ free_data๋ฅผ ์ฌ์ฉํด์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํด์ ํด์ผ ํฉ๋๋ค.
void free_queue(t_queue *queue, void (*free_data)(void *));