ํ์ ์ ์
- ์ปดํจํฐ์ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ ๊ตฌ์กฐ์ ํ๊ฐ์ง, Python์ insert(0, ๊ฐ)์ pop(0)๋ก ๊ตฌํํ ์ ์์ผ๋ฉฐ, Javascript๋ unshift์ shift๋ก ๊ตฌํํ ์ ์์. Java๋ LinkedList๋ฅผ ์ด์ฉํด์ ๊ตฌํํ ์ ์์ผ๋ฉฐ add / offer๋ฅผ ํตํด ์ฝ์ ํ๊ฑฐ๋ poll์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ์ ์๋ค.
- ๋จผ์ ์ง์ด ๋ฃ์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ค๋ ์ ์ ์ ์ถ(FIFO - Frist In First Out)๊ตฌ์กฐ๋ก ์ ์ฅํ๋ ํ์
- ํ๋ฆฐํฐ์ ์ถ๋ ฅ ์ฒ๋ฆฌ๋ ์๋์ฐ ์์คํ ์ ๋ฉ์์ง ์ฒ๋ฆฌ๊ธฐ, ํ๋ก์ธ์ค ๊ด๋ฆฌ ๋ฑ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋ ์๊ฐ ์์๋๋ก ์ฒ๋ฆฌํด์ผ ํ ํ์๊ฐ ์๋ ์ํฉ์ ์ด์ฉ

ํ์ ์ฉ์ด
- put : ํ์ ์๋ฃ๋ฅผ ๋ฃ๋ ๊ฒ
- get : ํ์์ ์๋ฃ๋ฅผ ๊บผ๋ด๋ ๊ฒ
- front : ๋ฐ์ดํฐ๋ฅผ getํ ์ ์๋ ์์น
- rear : ๋ฐ์ดํฐ๋ฅผ putํ ์ ์๋ ์์น
- Overflow : ํ๊ฐ ๊ฝ ์ฐจ์ ๋ ์ด์ ์๋ฃ๋ฅผ ๋ฃ์ ์ ์๋ ๊ฒฝ์ฐ
- Underflow : ํ๊ฐ ๋น์ด ์์ด ์๋ฃ๋ฅผ ๊บผ๋ผ ์ ์๋ ๊ฒฝ์ฐ
ํ์ ์ข ๋ฅ
1. ์ ํ ํ
- ๋ง๋ ๋ชจ์์ผ๋ก ๋ ํ
- ํฌ๊ธฐ๊ฐ ์ ํ๋์ด ์๊ณ ๋น ๊ณต๊ฐ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ชจ๋ ์๋ฃ๋ฅผ ๊บผ๋ด๊ฑฐ๋ ์๋ฃ๋ฅผ ํ ์นธ์ฉ ์ฎ๊ฒจ์ผ
ํ๋ค๋ ๋จ์ ์ด ์์
- Data : A โ B โ C โ D
- insert

2. ํํ ํ
- ๋ฐฐ์ด๋ก ํ๋ฅผ ์ ์ธํ ์ ํ์ ์ญ์ ์ ์์ฑ์ด ๊ณ์ ์ผ์ด๋ฌ์ ๋, ๋ง์ง๋ง ๋ฐฐ์ด์ ๋๋ฌ ํ ์ค์ ๋ก๋ ๋ฐ์ดํฐ ๊ณต๊ฐ์ด ๋จ์์์ง๋ง ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ๋ ์ ํ ํ์ ๋ฌธ์ ์ ์ ๋ณด์ํ ๊ฒ
- front(head)๊ฐ ํ์ ๋์ ๋ฟ์ผ๋ฉด ํ์ ๋งจ ์์ผ๋ก ์๋ฃ๋ฅผ ๋ณด๋ด์ด ์ํ์ผ๋ก ์ฐ๊ฒฐ
- Data : A โ B โ C โ D โ E

ย
์ถ์ฒ : https://ko.wikipedia.org/wiki/ํ_(์๋ฃ_๊ตฌ์กฐ) (์ํค๋ฐฑ๊ณผ)
ย
- ๋ฐฐ์ด๋ก ๊ตฌํ๋ ์ ํ ํ (java)
public class Main { public static void main(String args[]) { int size = 3; ArrayQueue arrQueue = new ArrayQueue(size); arrQueue.enqueue("A"); arrQueue.print(); arrQueue.enqueue("B"); arrQueue.print(); arrQueue.peek(); arrQueue.print(); arrQueue.enqueue("C"); arrQueue.print(); arrQueue.enqueue("D"); arrQueue.print(); arrQueue.dequeue(); arrQueue.print(); arrQueue.enqueue("E"); arrQueue.print(); arrQueue.dequeue(); arrQueue.print(); arrQueue.clear(); arrQueue.print(); arrQueue.clear(); arrQueue.dequeue(); } } class ArrayQueue { private int front; private int rear; private int size; private String arr[]; public ArrayQueue(int size) { front = -1; rear = -1; this.size = size; arr = new String[this.size]; } public boolean isEmpty() { return (front == rear); } public boolean isFull() { return (rear == this.size - 1); } public void enqueue(String item) { if(isFull()) { System.out.println("Queue is full"); } else { arr[++rear] = item; } } public String dequeue() { if(isEmpty()) { System.out.println("Queue is empty"); return null; } else { System.out.println(arr[front + 1]); front = (front + 1) % this.size; return arr[front]; } } public String peek() { if(isEmpty()) { System.out.println("Queue is empty"); return null; } else { System.out.println(arr[front + 1]); return arr[front + 1]; } } public void clear() { if(isEmpty()) { System.out.println("Queue is already empty"); } else { front = -1; rear = -1; arr = new String[this.size]; System.out.println("Queue is clear"); } } public void print() { if(isEmpty()) { System.out.println("Queue is empty"); } else { for (int i = front + 1; i <= rear; i++) { System.out.print(arr[i] + " "); } System.out.println(); } } }
// ์ถ๋ ฅ A A B A A B A B C Queue is full A B C A B C // ๋ฐฐ์ด๋ก ๊ตฌํํ ์ ํ ํ์ ๋จ์ : ์ค์ ๋ก๋ ๋ฐ์ดํฐ ๊ณต๊ฐ์ด ๋จ์์์ง๋ง ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ Queue is full B C B C Queue is clear Queue is empty Queue is already empty Queue is empty
ย
- ๋ฆฌ์คํธ๋ก ๊ตฌํ๋ ์ ํ ํ (java)
public class Main { public static void main(String args[]) { int size = 3; ListQueue listQueue = new ListQueue(size); listQueue.enqueue("A"); listQueue.print(); listQueue.enqueue("B"); listQueue.print(); listQueue.peek(); listQueue.print(); listQueue.enqueue("C"); listQueue.print(); listQueue.enqueue("D"); listQueue.print(); listQueue.dequeue(); listQueue.print(); listQueue.enqueue("E"); listQueue.print(); listQueue.dequeue(); listQueue.print(); listQueue.clear(); listQueue.print(); listQueue.clear(); listQueue.dequeue(); listQueue.print(); } } class Node { private String data; public Node link; public Node(String data) { this.data = data; this.link = null; } public Node(String data, Node link) { this.data = data; this.link = link; } public String getData() { return this.data; } } class ListQueue { private Node head; private Node front; private Node rear; private int size; public ListQueue(int size) { head = null; front = null; rear = null; this.size = size; } public boolean isEmpty(){ return (front == null && rear == null); } public boolean isFull() { if (isEmpty()) { return false; } else { int nodeCnt = 0; Node tmpNode = head; while(tmpNode.link != null) { nodeCnt++; tmpNode = tmpNode.link; } return (this.size - 1 == nodeCnt); } } public void enqueue(String data) { Node newNode = new Node(data); if (isFull()) { System.out.println("Queue is full"); return; } else if (isEmpty()) { this.head = newNode; this.front = this.head; this.rear = this.head; } else { rear.link = newNode; rear = newNode; } } public void dequeue() { Node tmpNode; if (isEmpty()) { System.out.println("Queue is empty"); return; } if(front.link == null) { head = null; front = null; rear = null; } else { tmpNode = front.link; head = tmpNode; front.link = null; front = head; } } public void peek() { if(isEmpty()) { System.out.println("Queue is empty"); return; } else { System.out.println(front.getData()); } } public void clear() { if(isEmpty()) { System.out.println("Queue is already empty"); return; } else { head = null; front = null; rear = null; } } public void print() { if (isEmpty()) { System.out.println("Queue is empty"); return; } else { Node tmpNode = this.front; while(tmpNode != null) { System.out.print(tmpNode.getData() + " "); tmpNode = tmpNode.link; } System.out.println(); } } }
// ์ถ๋ ฅ A A B A A B A B C Queue is full A B C B C B C E C E Queue is empty Queue is already empty Queue is empty Queue is empty
ย
- Queue ๋ผ์ด๋ธ๋ฌ๋ฆฌ (java)
import java.util.LinkedList; import java.util.Queue; public class Main { public static void main(String args[]) { Queue<String> queue = new LinkedList<String>(); queue.offer("A"); System.out.println(queue.toString()); queue.offer("B"); System.out.println(queue.toString()); System.out.println(queue.peek()); System.out.println(queue.toString()); queue.offer("C"); System.out.println(queue.toString()); queue.offer("D"); System.out.println(queue.toString()); System.out.println(queue.poll()); System.out.println(queue.toString()); queue.offer("E"); System.out.println(queue.toString()); System.out.println(queue.poll()); System.out.println(queue.toString()); queue.clear(); System.out.println(queue.toString()); } }
// ์ถ๋ ฅ [A] [A, B] A [A, B] [A, B, C] [A, B, C, D] A [B, C, D] [B, C, D, E] B [C, D, E] []