‡πŸ‘©‍πŸ’» ‡/º Java

[자료ꡬ쑰] 큐 (Queue) κ΅¬ν˜„ (Java)

Trudy | 솑연 2023. 12. 4. 18:07

πŸ“ν(Queue) λž€?


μ„ μž…μ„ μΆœ('FIFO') λ°©μ‹μœΌλ‘œ κ°€μž₯ λ¨Όμ € λ“€μ–΄μ˜¨ λ°μ΄ν„°κ°€ κ°€μž₯ λ¨Όμ € λ‚˜κ°„λ‹€
데이터λ₯Ό μ‚½μž…ν•˜λŠ” μ—°μ‚°κ³Ό μ‚­μ œν•˜λŠ” 연산이 μ–‘μͺ½μ—μ„œ μ§„ν–‰λœλ‹€.




πŸ“ν κ΅¬ν˜„ λ©”μ†Œλ“œ 


배열을 μ΄μš©ν•΄μ„œ μˆ«μžλ₯Ό μ—¬λŸ¬κ°œ μ €μž₯ν•  μˆ˜ μžˆκ²Œ λ³€μˆ˜ μƒμ„±
배열에 μ§μ ‘ μ ‘κ·Όν•΄μ„œ μˆ«μžλ₯Ό μ €μž₯ν•  μˆ˜ μžˆμœΌλ©΄ μ•ˆλ˜κΈ° λ•Œλ¬Έμ— μ ‘κ·Ό μ œμ–΄μžλ‘œ μ œμ–΄

front λ³€μˆ˜ : 맨 μ•žμ— 데이터가 어디에 μ €μž₯λœκ±΄μ§€ 가리킴
rear λ³€μˆ˜ : λ‹€μŒ 데이터가 어디에 μ €μž₯될건지 가리킴
num λ³€μˆ˜ : ν˜„μž¬ μ €μž₯된 λ°μ΄ν„°μ˜ 수λ₯Ό μ €μž₯함

🐾 μƒμ„±μž
크기λ₯Ό μ „λ‹¬λ°›μ•„μ„œ ν•΄λ‹Ή ν¬κΈ°λ§ŒνΌ μ •μˆ˜λ₯Ό μ €μž₯ν•  μˆ˜ μžˆλŠ” λ°°μ—΄ μƒμ„±
front 및 rearλŠ” 0 을 μ €μž₯

🐾  isEmpty; 큐가 λΉ„μ–΄μžˆλŠ”μ§€ 검사
numκ°€ 0이면 true λ°˜ν™˜
κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ false λ°˜ν™˜

🐾 isFull; 큐가 가득 μ°¨μžˆλŠ”μ§€ 검사
λ°°μ—΄μ˜ ν¬κΈ°κ°€ numλž‘ κ°™μœΌλ©΄ true λ°˜ν™˜
κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ false λ°˜ν™˜

🐾 enQueue; 데이터λ₯Ό μ €μž₯ν•˜λŠ” μ—°μ‚°
μ €μž₯ν•  μˆ«μžλ₯Ό ν•˜λ‚˜ μ „달받고
큐가 κ°€λ“ μ°ΌμœΌλ©΄ κ°€λ“μ°Όλ‹€κ³  μΆœλ ₯
κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ ν˜„μž¬ rear의 μœ„μΉ˜μ˜ 배열에 전달받은 숫자λ₯Ό μ €μž₯ν•˜κ³  rear 1증가 ν›„ num 1 증가

🐾 deQueue; 데이터λ₯Ό μ‚­μ œν•˜λŠ” μ—°μ‚°
큐가 λΉ„μ–΄μžˆμœΌλ©΄ λΉ„μ–΄μžˆμŒ μ΄λΌκ³  μΆœλ ₯
κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ ν˜„μž¬ front의 μœ„μΉ˜μ˜ λ°°μ—΄μ˜ κ°’을 κΊΌλ‚΄κ³  front 1증가 ν›„ num 1 κ°μ†Œ

🐾  display
큐에 μ €μž₯된 λͺ¨λ“  λ°μ΄ν„°λ₯Ό μΆœλ ₯ν•˜λŠ” κΈ°λŠ₯


πŸ“κ΅¬ν˜„ μ½”λ“œ 

package stack;

public class Queue {
    private int front = 0;
    private int rear = 0;

    private int num = 0;

    private Integer[] queue;
    public Queue(int size) {
        this.size = size;
        queue =  new Integer[size];
    }

    int size;

    public boolean isEmpty(){
        if(num == 0) return true;
        else return false;
    }

    public boolean isFull(){
        if(num == size) return true;
        else return false;
    }

    public void enQueue(int x){
        if(isFull()) System.out.println("큐가 가득 μ°Έ");
        else {
            queue[rear%size] = x;
            rear= (rear+1)%size;
            num++;
        }
    }

    public void deQueue(){
        if(isEmpty()) System.out.println("큐가 λΉ„μ–΄ 있음");
        else {
            System.out.println(queue[front]);
            queue[front] = null;
            front++;
            num--;
        }
    }

    void display(){
        for (int i = 0; i < size; i++) {
            System.out.print("[" + queue[i] + "] ");
        }
        System.out.println();
    }

}