- λ²μ€μ νκΈ° μν΄ μ€μ μλ κ²μ μκ°νλ©΄ μ΄ν΄νκΈ° μ’μ΅λλ€.
- ν(queue) μμ μ€νκ³Ό λ§μ°¬κ°μ§λ‘ μΌμ’ μ 리μ€νΈμ λλ€.
- λ¨ λ°μ΄ν°μ μ½μ μ νμͺ½ λμμ, μμ λ λ°λμͺ½ λμμλ§ μΌμ΄λ©λλ€.
- FIFO(First in Last Out)
- μ½μ μ΄ μΌμ΄λλ κ³³μ νλ¨(rear), μμ κ° μΌμ΄λλ κ³³μ μ λ¨(front)λΌκ³ ν©λλ€. μ΄λ₯Ό λ³μννμ¬ λ°°μ΄μ ν¬μΈν μ μ΄μ©ν©λλ€.
- CPU μ€μΌμ€λ§, λ°μ΄ν° λ²νΌ λ±μμ νμ©λ©λλ€.
μ ν νκ° λΉμλμ§ κ²μ¬
int is_empty() {
if (front == rear) {
return 1;
}
return 0;
}
μ ν νκ° κ°λ μ°Όλμ§ κ²μ¬
int is_full() {
if (rear == MAX_QUEUE_SIZE - 1) {
return 1;
}
return 0;
}
νμ rearμ μλ‘μ΄ μμλ₯Ό μ½μ νλ μ°μ°
void addq(element item) {
if (!is_full()) {
queue[++rear] = item;
}
}
νμ frontμ μλ μμλ₯Ό νλ‘λΆν° μμ νκ³ λ°ννλ μ°μ°
element deleteq() {
if (!is_empty()) {
return queue[++front];
}
}
νμ 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;
//μ κΈ°λ³Έ λ©μλλ₯Ό μ¬μ©νμ¬ κ΅¬ν
- λ°°μ΄μ μ²μκ³Ό λμ΄ μ°κ²°λμ΄ μλ€κ³ μκ°ν©λλ€.
- 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