yjdat 2022. 10. 6. 14:18

๐Ÿ“Œ ๋ชฉ์ฐจ

โ“ Queue ๋ž€ โ“

Queue ์ฃผ์š” ๋™์ž‘

Queue์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€

Queue์˜ ์ข…๋ฅ˜

Queue ๊ตฌํ˜„


 

โ“ Queue ๋ž€ โ“

ํ(Queue)๋Š” ๋จผ์ € ์ง‘์–ด ๋„ฃ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” FIFO(First In First Out), ์„ ์ž…์„ ์ถœ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์„ ์ž…์„ ์ถœ ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•ž์ชฝ์„ ๋‚˜ํƒ€๋‚ด๋Š” Front์™€ ๋’ค์ชฝ์„ ๋‚˜ํƒ€๋‚ด๋Š” Rear๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜์ค‘์— ์ง‘์–ด ๋„ฃ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ์Šคํƒ(stack)๊ณผ๋Š” ๋ฐ˜๋Œ€๋˜๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

 

๐Ÿ”ถ Queue ์ฃผ์š” ๋™์ž‘

  • enQueue( ) : ํ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ณผ์ •, Rear๊ฐ€ ์ปค์ง„๋‹ค. Push๋กœ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์Šคํƒ๊ณผ ํ˜ผ๋ˆ์ด ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ์ง€์–‘ํ•œ๋‹ค.
  • deQueue( ) : ํ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋นผ๋Š” ๊ณผ์ •, Front๊ฐ€ ์ปค์ง„๋‹ค. Pop์œผ๋กœ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์œ„์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ง€์–‘ํ•œ๋‹ค.
  • isEmpty( ) : ํ๊ฐ€ ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • isFull( ) : ํ๊ฐ€ ๊ฝ‰ ์ฐจ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • peek( ) : ์•ž์— ์žˆ๋Š” ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

๐Ÿ”ถ Queue์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€

๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋œ ์‹œ๊ฐ„ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์— ์ด์šฉํ•œ๋‹ค.

  • ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ (BFS, Breath-First Search) ๊ตฌํ˜„
    • ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋…ธ๋“œ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ €์žฅํ•˜๋Š” ์šฉ๋„๋กœ ํ(Queue) ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜ ์ฒ˜๋ฆฌํ•  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ๋…ธ๋“œ์™€ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค์„ ํ(Queue)์— ๋‹ค์‹œ ์ €์žฅํ•œ๋‹ค.
    • ๋…ธ๋“œ๋ฅผ ์ ‘๊ทผํ•  ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์บ์‹œ (Cache) ๊ตฌํ˜„
  • ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ™์€ ์ž‘์—… ์˜ˆ์•ฝ (์ธ์‡„ ๋Œ€๊ธฐ์—ด)
  • ์„ ์ž…์„ ์ถœ์ด ํ•„์š”ํ•œ ๋Œ€๊ธฐ์—ด ( ํ‹ฐ์ผ“ ์นด์šดํ„ฐ)
  • ์ฝœ์„ผํ„ฐ ๊ณ ๊ฐ ๋Œ€๊ธฐ์‹œ๊ฐ„
  • ํ”„๋ฆฐํ„ฐ์˜ ์ถœ๋ ฅ ์ฒ˜๋ฆฌ
  • ์œˆ๋„ ์‹œ์Šคํ…œ์˜ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๊ธฐ
  • ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ

 

๐Ÿ”ถ Queue์˜ ์ข…๋ฅ˜

  • ์„ ํ˜• ํ : 1์ฐจ์› ๋ฐฐ์—ด์„ ์ด์šฉํ•œ ํ ( ํ์˜ ํฌ๊ธฐ๊ฐ€ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ๋˜๋Š” ๊ตฌ์กฐ ), front์™€ rear์„ ์ด์šฉํ•˜์—ฌ ๊ณต๋ฐฑ๊ณผ ํฌํ™” ์ƒํƒœ๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.
    • front = rear ์ธ ๊ฒฝ์šฐ ๊ณต๋ฐฑ ์ƒํƒœ์ด๋‹ค.
    • rear = n - 1 ( n์€ ๋ฐฐ์—ดํฌํ‚ค์ด๋‹ค.)
  • ์›ํ˜• ํ : ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์•„๋ผ๊ธฐ ์œ„ํ•ด ์ด๋ก ์ ์œผ๋กœ ์›ํ˜•์ ์ธ ํ (๋ฐฐ์—ด์˜ ์ฒ˜์Œ๊ณผ ๋์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •)๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ
    • ๊ณต๋ฐฑ๊ณผ ํฌํ™” ์ƒํƒœ ๊ตฌ๋ถ„์„ ์œ„ํ•ด front๊ฐ€ ์žˆ๋Š” ์ž๋ฆฌ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋นˆ์ž๋ฆฌ๋กœ ๋‘”๋‹ค.
    • front๊ฐ€ ์ž‡๋Š” ์ž๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋น„์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
    • rear๊ฐ€ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์— ์žˆ๋‹ค๋ฉด mod์—ฐ์‚ฐ์„ ์ด์šฉํ•˜์—ฌ ์•ž์œผ๋กœ ๋ณด๋‚ธ๋‹ค. (Index์˜ ์ˆœํ™˜)
    • front์™€ rear๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๊ณต๋ฐฑ ์ƒํƒœ์ด๋‹ค.
    • rear์˜ ๋‹ค์Œ ์นธ์ด front๋ผ๋ฉด full ์ƒํƒœ์ด๋‹ค.
  • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List)๋ฅผ ์ด์šฉํ•œ ํ : ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ์ฒ˜๋Ÿผ ์ด์šฉํ•œ๋‹ค.
    • front๋Š” ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. rear๋Š” ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
    • ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๋Š” ํ์˜ ์›์†Œ์ด๋‹ค.
    • ์ดˆ๊ธฐ ํ˜น์€ ๊ณต๋ฐฑ ์ƒํƒœ๋Š” front์™€ rear๊ฐ€ null์ด๋‹ค.
    • front์™€ rear๋Š” ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.(ํฌ์ธํ„ฐ)
    • ๋นˆ ๊ณต๊ฐ„์ด ์ƒ๊ธฐ์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•„๋‚„ ์ˆ˜ ์žˆ๋‹ค.
    • ๋Œ€์‹  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žก๋Š” ์‹œ๊ฐ„, ๊ตฌํ˜„ ๋‚œ์ด๋„๊ฐ€ ์žˆ๋‹ค.

 

๐Ÿ”ถ Queue ๊ตฌํ˜„

public class MyQueue {
  private static class QueueNode {
    private T data;
    private QueueNode next;

    public QueueNode(T data) {
      this.data = data;
    }
  }

  private QueueNode first;
  private QueueNode last;

  public void add(T item) {
    QueueNode t = new QueueNode(item);

    if (last != null) last.next = t;
    last = t;
    if (first == null) first = last;
  }

  public T remove() {
    if (first == null) throw new NoSuchElementException();
    T data = first.data;
    first = first.next;

    if (first == null) last = null;
    return data;
  }

  public T peek() {
    if (first == null) throw new NoSuchElementException();
    return first.data;
  }

  public boolean isEmpty() {
    return first == null;
  }
}

 


reference

https://gmlwjd9405.github.io/2018/08/02/data-structure-queue.html

 

[์ž๋ฃŒ๊ตฌ์กฐ] ํ(Queue)๋ž€ - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

https://mungto.tistory.com/169

 

ํ(Queue)๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์ถœ์ฒ˜ : https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDN86AAXw5UW6&subjectId=AWOVIoJqqfYDFAWg SW Expert Academy SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ..

mungto.tistory.com

 

https://galid1.tistory.com/483

 

์ž๋ฃŒ๊ตฌ์กฐ - ํ(Queue)๋ž€?

Queue๋ž€ Queue๋ž€ - ํ๋Š” ํ•œ์ชฝ ๋(rear) ์—์„œ๋Š” ์‚ฝ์ž… ์—ฐ์‚ฐ๋งŒ ์ด๋ฃจ์–ด์ง€๋ฉฐ ๋‹ค๋ฅธ ํ•œ์ชฝ ๋(front) ์—์„œ๋Š” ์‚ญ์ œ ์—ฐ์‚ฐ๋งŒ ์ด๋ฃจ์–ด์ง€๋Š” ์œ ํ•œ ์ˆœ์„œ ๋ฆฌ์ŠคํŠธ ์ด๋‹ค. ํŠน์„ฑ - ๊ตฌ์กฐ์ƒ ๋จผ์ € ์‚ฝ์ž…๋œ item ์ด ๋จผ์ € ์‚ญ์ œ ๊ฐ€ ์ด๋ฃจ

galid1.tistory.com