‡๐Ÿ‘ฉ‍๐Ÿ’ป ‡/º 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();
    }

}