[์๋ฃ๊ตฌ์กฐ] Queue ๐
ํ(Queue)๐
ํ?
- ๋ฒ์ค์ ํ๊ธฐ ์ํด ์ค์ ์๋ ๊ฒ์ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ข์ต๋๋ค.
- ํ(queue) ์ญ์ ์คํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ผ์ข ์ ๋ฆฌ์คํธ์ ๋๋ค.
- ๋จ ๋ฐ์ดํฐ์ ์ฝ์ ์ ํ์ชฝ ๋์์, ์ญ์ ๋ ๋ฐ๋์ชฝ ๋์์๋ง ์ผ์ด๋ฉ๋๋ค.
- FIFO(First in Last Out)
- ์ฝ์ ์ด ์ผ์ด๋๋ ๊ณณ์ ํ๋จ(rear), ์ญ์ ๊ฐ ์ผ์ด๋๋ ๊ณณ์ ์ ๋จ(front)๋ผ๊ณ ํฉ๋๋ค. ์ด๋ฅผ ๋ณ์ํํ์ฌ ๋ฐฐ์ด์ ํฌ์ธํ ์ ์ด์ฉํฉ๋๋ค.
- CPU ์ค์ผ์ค๋ง, ๋ฐ์ดํฐ ๋ฒํผ ๋ฑ์์ ํ์ฉ๋ฉ๋๋ค.
๋ฉ์๋
IsEmpty()
์ ํ ํ๊ฐ ๋น์๋์ง ๊ฒ์ฌ
int is_empty() {
if (front == rear) {
return 1;
}
return 0;
}
IsFull()
์ ํ ํ๊ฐ ๊ฐ๋ ์ฐผ๋์ง ๊ฒ์ฌ
int is_full() {
if (rear == MAX_QUEUE_SIZE - 1) {
return 1;
}
return 0;
}
addq() ๐
ํ์ rear์ ์๋ก์ด ์์๋ฅผ ์ฝ์ ํ๋ ์ฐ์ฐ
void addq(element item) {
if (!is_full()) {
queue[++rear] = item;
}
}
deleteq() ๐
ํ์ front์ ์๋ ์์๋ฅผ ํ๋ก๋ถํฐ ์ญ์ ํ๊ณ ๋ฐํํ๋ ์ฐ์ฐ
element deleteq() {
if (!is_empty()) {
return queue[++front];
}
}
peek()
ํ์ front์ ์๋ ์์๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ๋ฐํํ๋ ์ฐ์ฐ
element peek() {
if (!is_empty()) {
return queue[rear];
}
}
ํ ๊ตฌํํ๊ธฐ
์คํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐฐ์ด ํน์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํ ์ ์์ต๋๋ค
์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๊ตฌํ๋ ํ
- ์ฝ๋๊ฐ ๋ ๋ณต์กํ๊ณ ๋งํฌ ํ๋ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ ๋ง์ด ์ฌ์ฉํ์ง๋ง, ํฌ๊ธฐ๊ฐ ์ ํ๋์ง ์์ต๋๋ค.
- ํ์ rear์์๋ ์ฝ์ , front์์๋ ์ญ์ ๊ฐ ์ผ์ด๋๊ธฐ๋๋ฌธ์ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ์์ชฝ์ front, ๋ค์ชฝ์ rear๋ก ํ๋ ๊ฒ์ด ์ ๋ฆฌํฉ๋๋ค.
-> ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๋ง์ง๋ง์ ์ญ์ ํ๊ธฐ ์ํด์๋ ํญ์ ๊ทธ์ ๋ ธ๋์ ์ฃผ์๋ฅผ ์์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฒ๊ฑฐ๋กญ์ต๋๋ค.- ์ฝ์ ์ ํ๊ธฐ ์ํด์๋ ๋ง์ง๋ง ๋ ธ๋์ ์ฃผ์๋ฅผ ํญ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค.
#include <stdio.h>
#include <stdlib.h>
typedef int element; //๋ฐ์ดํฐ ํ์
์ด ๋ฐ๋๊ฒฝ์ฐ ์์ ๋กญ๊ฒ ์ฐ๊ธฐ ์ํด ์ฒ๋ฆฌ
typedef struct { // ์ฐ๊ฒฐ๋ฆฌ์คํธ ์ด์ฉ ์ํด
element data;
struct Node* next;
}Node;
typedef struct {
Node* front; //queue์ ์ณฃ๋ฒ์งธ ์ฃผ์
Node* rear; //queue์ ๋ง์ง๋ง ์ฃผ์
int size;
}QueueType; //์ฌ๋ฌ๊ฐ์ ํ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ ๋ฐ์ดํฐ ํ์
ํฌ์ธํฐ๋ฅผ ์ค์ .
//์ฝ์
, ๋ฆฌ์คํธ์ ๊ฐ์ฅ ๋ค ์ฆ rear์์ ์ด๋ฃจ์ด์ง๋ค
void addq(QueueType* q, element item) {
Node* node = (Node*)malloc(sizeof(QueueType));
node->data = item;
node->next = NULL;
//ํ์ ์ํํ์ธ
if (q->front == NULL) {//ํ๊ฐ ๋น์๋ค๋ฉด
q->front = node;
q->rear = node;
}
else { //ํ๊ฐ ๋น์ด์์ง ์๋ค๋ฉด
q->rear->next = node;
q->rear = node;
}
}
//์ญ์ , ๋ฆฌ์คํธ์ ๊ฐ์ฅ ์ ์ฆ front์์ ์ด๋ฃจ์ด์ง๋ค.
element deleteq(QueueType* q) {
Node* temp = q->front;
element item;
item = temp->data; //๋ฐ์ดํฐ ๊บผ๋ธ๋ค.
q->front = q->front->next; //front๋ ๊ทธ ๋ค์ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค.
if (q->front == NULL) {
q->rear == NULL;
}
free(temp);
return item;
}
๋ฐฐ์ด๋ก ๊ตฌํ๋ ํ
- ํ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ผ๋ก 1์ฐจ์ ๋ฐฐ์ด์ ํ์ฉํฉ๋๋ค.
- front์ rear์ ๊ฐ์ด ๊ณ์ ์ฆ๊ฐ๋ง ํ๊ธฐ ๋๋ฌธ์ ํ์ ํฌ๊ธฐ๊ฐ ์ ํ๋์ด ์์ต๋๋ค.
#include <stdio.h>
#define MAX_QUEUE_SIZE 100
typedef int element;
element q[MAX_QUEUE_SIZE];
int rear = -1;
int front = -1;
//์ ๊ธฐ๋ณธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ
์ํ ํ(circural Queue)
- ๋ฐฐ์ด์ ์ฒ์๊ณผ ๋์ด ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
- front์ rear์ ์ด๊ธฐ๊ฐ์ 0์ ๋๋ค.
- front๋ ํญ์ ํ์ ์ฒซ๋ฒ์จฐ ์์์ ํ๋ ์์, rear์ ๋ง์ง๋ง ์์๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
- ํฌํ ์ํ์ ๊ณต๋ฐฑ ์ํ๋ฅผ ๊ตฌ๋ณํ๊ธฐ ์ํด ํ๋์ ์๋ฆฌ๋ ํญ์ ๋น์๋ก๋๋ค.
- front == rear ์ด๋ฉด ๊ณต๋ฐฑ, front๊ฐ rear๋ณด๋ค ํ๋ ์์ ์์ผ๋ฉด ํฌํ ์ํ.
- ๋๋จธ์ง ์ฐ์ฐ์(mod)๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํฉ๋๋ค.
#include <stdio.h>
#define MAX_QUEUE_SIZE 100
typedef int element;
element q[MAX_QUEUE_SIZE];
int rear = 0;
int front = 0;
int is_empty() {
return (rear == front);
}
int is_full() {
return ((rear + 1) % MAX_QUEUE_SIZE == front);
}
void addq(element item) {
if (!is_full()) {
rear = (rear + 1) % MAX_QUEUE_SIZE;
q[rear] = item;
}
}
element deleteq() {
if (!is_empty()) {
front = (front + 1) % MAX_QUEUE_SIZE;
return q[front];
}
}
์ด๋ฏธ์ง ์ถ์ฒ
http://blog.naver.com/coolten/140057846054
http://blog.naver.com/coolten/140057845842
https://encrypted-tbn0.gstatic.com
https://media.vlpt.us/images/i_meant_to_be/post/a6ede145-e1d7-460e-95e0-
https://velog.io/@i_meant_to_be/Queue-C
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([์๋ฃ๊ตฌ์กฐ] Queue ๐), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@tigermint/์๋ฃ๊ตฌ์กฐ-Queue์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค