#include <stdio.h>
#include <stdlib.h> // malloc함수(동적할당), free함수(동적해제)
#define EMPTY 0
typedef struct node {
int data;
struct node* link;
}Queue;
Queue* GetNode() { //노드를 힙 지역에 만들어주는 함수
Queue* newNode = (Queue *)malloc(sizeof(Queue));
newNode->link = EMPTY;
return newNode;
}
void Enqueue(Queue** front, Queue** rear, int data) {
Queue* newNode = GetNode();
newNode->data = data;
if (*front == EMPTY && *rear == EMPTY)
(*front) = newNode;
else
(**rear).link = newNode;
(*rear) = newNode;
}
int Dequeue(Queue** front, Queue** rear) {
if ((*front == EMPTY && *rear == EMPTY)) {
printf("Node is nothing!\n");
return 0;
}
int data_tmp = (**front).data;
Queue* tmp = *front;
if ((*front) == (*rear))
(*front) = (*rear) = EMPTY;
else
(*front) = (**front).link;
free(tmp);
return data_tmp;
}
/*
int Dequeue(Queue** front, Queue** rear) {
if ((*front == EMPTY && *rear == EMPTY)) {
printf("Node is nothing!\n");
return 0;
}
int data_tmp = (**front).data;
Queue** tmp = (**front).link;
free(*front);
if ((*front)==(*rear))
(*rear) = tmp;
(*front) = tmp;
return data_tmp;
}*/
void empty(Queue** front, Queue** rear) {
while ((*front) != EMPTY || (*rear) != EMPTY) {
Dequeue(front, rear);
}
}
void main() {
// Queue Linked List : FIFO
//front는 처음 노드의 주소 값(삭제), rear는 마지막 노드의 주소값(추가)
Queue* front = EMPTY;
Queue* rear = EMPTY;
Dequeue(&front, &rear);
Enqueue(&front, &rear, 10);
Enqueue(&front, &rear, 20);
Dequeue(&front, &rear);
Dequeue(&front, &rear);
Dequeue(&front, &rear);
Enqueue(&front, &rear, 30);
Enqueue(&front, &rear, 40);
empty(&front, &rear);
Dequeue(&front, &rear);
}