이것은 윤성우의 열혈 자료구조를 참고했습니다. this refers to 윤성우의 열혈 자료구조.
1-1-1. queue based on LinkedList.
- there is difference between stack and queue. it is how to remove a data.
- when you make queue, use the stack. but removing a data is different from the original stack.
- 배열기반 보다 연결 리스 트 기반이 더욱 쉽다.
- 스택과 큐의 차이점은 단지 데이터를 어떻게 제거하는 지가 다르다. 즉, 이전 스택에서 데이터를 제거하는
방식을 바꾸면 될거 같다. -> 연결 리스트 기반인 경우에만
1-1-2. intialization of queue based on LinkedList.
void QueueInit(Queue * pq)
{
pq -> front = NULL;
pq -> rear = NULL;
}
int QIsEmpty(Queue * pq)
{
if(pq -> front == NULL)
return TRUE;
else
return FALSE;
}
void Enqueue (Queue * pq, Data data)
{
Node * newNode = (Node * ) malloc(sizeof(Node));
newNode -> next = NULL;
newNode -> data = data;
if(QIsEmpty(pa))
{
pq -> front = newNode;
pq -> rear = newNode;
}
else
{
pq -> rear -> next = newNode;
pq -> rear = newNode;
}
}
void Dequeue (Queue * pq, Data data)
{
Node * delNode;
Data retData;
if(QIsEmpty(pa))
{
printf("Queue is empty\n");
exit(-1);
}
delNode = pq -> front;
retData = delNode -> data;
pq -> front = pq -> front -> next;
frer (delNode);
return retData;
}
// example of main function
int main(void)
{
// initialization queue
Queue q;
QueueInit(&q);
// put data in the queue
Enqueue(&q, 1);
Enqueue(&q, 2);
Enqueue(&q, 3);
Enqueue(&q, 4);
Enqueue(&q, 5);
// remove data from queue
while (!QIsEmpty(&q))
{
printf("%d ", Dequeue(&q));
}
return 0;
}
// the result of main function
-> 1 2 3 4 5