Queue - Data-Structure-Study/java-datastructure GitHub Wiki

Queue

Author: Dion๐Ÿฑ, Ever

ํ ์ž๋ฃŒ๊ตฌ์กฐ

ํ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํŠน์ง•

  • ๋จผ์ € ๋“ค์–ด๊ฐ„ ํ•ญ๋ชฉ์ด ๋จผ์ € ๋‚˜์˜จ๋‹ค.(FIFO)
  • ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ๋Š” ์€ํ–‰ ์—…๋ฌด ๋Œ€๊ธฐ์—ด์„ ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • ์Šคํƒ๊ณผ์˜ ์ฐจ์ด์ ์€ ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•  ๋•Œ, ๊ฐ€์žฅ ์ฒ˜์Œ์— ์ถ”๊ฐ€๋œ ํ•ญ๋ชฉ์ด ์ œ๊ฑฐ๋œ๋‹ค๋Š” ๊ฒƒ์ด ์ฐจ์ด์ ์ด๋‹ค.

ํ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๊ธฐ๋Šฅ

  • Enqueue: Insertion(์‚ฝ์ž…) ํ์˜ ๋งจ ๋’ท๋ถ€๋ถ„์— ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • Dequeue: Deletion(์ œ๊ฑฐ) ํ์˜ ๋งจ ์•ž๋ถ€๋ถ„์˜ ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•˜๊ณ  ๊ทธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • Peek: ๋งจ ์•ž์˜ ์ž๋ฃŒ๋ฅผ ํ™•์ธ๋งŒ ํ•œ๋‹ค.(Stack๊ณผ ๋™์ผ)

ํ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์š”์†Œ ๋ช…์นญ

  • Front: ํ์˜ ๋งจ ์•ž ์œ„์น˜์˜ ์ฐธ์กฐ ๊ฐ’
  • Rear: ํ์˜ ๋งจ ๋’ค ์œ„์น˜์˜ ์ฐธ์กฐ ๊ฐ’

๋ฐฐ์—ด๋กœ ํ๋ฅผ ๊ตฌํ˜„

ํ๋ฅผ ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ, ํ์—์„œ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๋ฅผ ๊ฑฐ๋“ญํ•˜๊ฒŒ ๋˜๋ฉด ํ์˜ Item๋“ค์ด ๋ฐฐ์—ด์˜ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์œผ๋กœ ํŽธ์ค‘๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ƒˆ item๋“ค์€ ๋’ค์—์„œ ์‚ฝ์ž…๋˜๊ณ  ์‚ญ์ œ๋Š” ์•ž์—์„œ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์—, ์•ž์— ๋นˆ ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค ์ค‘ ํ•˜๋‚˜๋Š” ํ์˜ item๋“ค์„ ๋ฐฐ์—ด์˜ ์•ž๋ถ€๋ถ„์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ํ์— ๋“ค์–ด์žˆ๋Š” item ์ˆ˜์— ๋น„๋ก€ํ•œ๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ–๋Š”๋‹ค.

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ, ๋ฐฐ์—ด์„ ์›ํ˜•์œผ๋กœ, ์ฆ‰ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๊ฐ€ ์ฒซ ์›์†Œ์™€ ๋งž๋‹ฟ์•„ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค

๋ฐฐ์—ด์˜ ์•ž๋’ค๊ฐ€ ๋งž๋‹ฟ์•„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด์˜ rear ๋‹ค์Œ์˜ ๋น„์–ด ์žˆ๋Š” ์›์†Œ์˜ ์ธ๋ฑ์Šค๋Š” rear = (rear + 1)%N ์œผ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ N์€ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ์ด๋‹ค.

ํ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ์‚ญ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ํ๊ฐ€ Empty๊ฐ€ ๋˜๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด๋ณด์ž. ํ์˜ ๋งˆ์ง€๋ง‰ item์„ ์‚ญ์ œํ•œ ํ›„์— ํ๊ฐ€ Emptry์ž„์—๋„ rear๋Š” item์ด ์žˆ์—ˆ๋˜ ๊ณณ์„ ์•„์ง๋„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ item์„ ์‚ญ์ œํ•  ๋•Œ๋งˆ๋‹ค ํ๊ฐ€ Empty๊ฐ€ ๋˜๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ณ , ๋งŒ์ผ Empty๊ฐ€ ๋˜๋ฉด, front = 0, rear = 0์ด ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ญ์ œํ•  ๋•Œ๋งˆ๋‹ค Empty ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์ˆ˜ํ–‰์˜ ํšจ์œจ์„ฑ์„ ๋–จ์–ด๋œจ๋ฆฐ๋‹ค.

์‚ญ์ œํ•  ๋•Œ๋งˆ๋‹ค ํ๊ฐ€ Empty์ธ์ง€ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Front๋ฅผ ์‹ค์ œ์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” Item์˜ ๋ฐ”๋กœ ์•ž์˜ ๋น„์–ด์žˆ๋Š” ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค๊ฐ€ Front๊ฐ€ ์•„๋‹Œ 1๋ฒˆ์งธ ์ธ๋ฑ์Šค๊ฐ€ Front์ด๋‹ค.

๋”ฐ๋ผ์„œ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ N์ด๋ผ๋ฉด ์‹ค์ œ๋กœ N-1๊ฐœ์˜ ๊ณต๊ฐ„๋งŒ item๋“ค์„ ์ €์žฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ์ฆ‰, ๋ฐฐ์—ด์˜ ํ•œ ๊ฐœ ์›์†Œ, 0๋ฒˆ์งธ ์ธ๋ฑ์Šค๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ด๋ ‡๊ฒŒ ๋˜๋ฉด front = rear๊ฐ€ ๋˜๋ฉฐ ํ์˜ ์ดˆ๊ธฐ์ƒํƒœ์™€ ๊ฐ™์•„์ง„๋‹ค.

์ˆ˜ํ–‰์‹œ๊ฐ„

๋ฐฐ์—ด

  • ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„ํ•œ add์™€ remove ์—ฐ์‚ฐ์€ ๊ฐ๊ฐ O(1)์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค
  • ๋ฐฐ์—ด ํฌ๊ธฐ๋ฅผ ํ™•๋Œ€ ๋˜๋Š” ์ถ•์†Œ์‹œํ‚ค๋Š” ๊ฒฝ์šฐ์— ํ์˜ ๋ชจ๋“  item๋“ค์„ ์ƒˆ ๋ฐฐ์—ด๋กœ ๋ณต์‚ฌํ•ด์•ผํ•˜๋ฏ€๋กœ O(N) ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค

SLL

  • SLL๋กœ ๊ตฌํ˜„ํ•œ add์™€ remove ์—ฐ์‚ฐ์€ ๊ฐ๊ฐ O(1) ์‹œ๊ฐ„์ด ์†Œ์š”. ์‚ฝ์ž… ๋˜๋Š” ์‚ญ์ œ ์—ฐ์‚ฐ์ด rear์™€ front๋กœ ์ธํ•ด ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค์„ ์ผ์ผ์ด ๋ฐฉ๋ฌธํ•  ํ•„์š”์—†์ด ๊ฐ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค

์ฐธ๊ณ ํ•  ๊ฒƒ

  • ์šฐ์„ ์ˆœ์œ„ ํ: ์›์†Œ๋“ค์— ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋งค๊ฒจ์„œ ๋„ฃ์„ ๋•Œ์˜ ์ˆœ์„œ์™€ ์ƒ๊ด€์—†์ด ๋บ„ ๋•Œ์—๋Š” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์›์†Œ๋ถ€ํ„ฐ ๋นผ๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.

    ๋Œ€ํ‘œ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ํž™์ด ์žˆ๋‹ค.

  • ๋ฑ(Deque; Double Ended Queue): ์–‘์ชฝ์—์„œ ์‚ฝ์ž…/์ œ๊ฑฐ๊ฐ€๋Šฅ

๋ฑ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” SLL ๋ณด๋‹ค๋Š” DLL์ด ๋” ์ ํ•ฉํ•œ๋ฐ, rear๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋…ธ๋“œ์˜ ์ด์ „ ๋…ธ๋“œ์˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์•Œ์•„์•ผ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฑ์˜ ์˜ˆ์‹œ

  • ์Šคํฌ๋กค(Scroll)
  • ๋ฌธ์„œ ํŽธ์ง‘๊ธฐ์˜ undo ์—ฐ์‚ฐ
  • ์ตœ๊ทผ ๋ฐฉ๋ฌธ๋œ ์›น ํ”ผ์ด์ง€ ์ฃผ์†Œ๋Š” ์•ž์— ์‚ฝ์ž…ํ•˜๊ณ , ์ผ์ • ์ˆ˜์˜ ์ƒˆ ์ฃผ์†Œ๋“ค์ด ์•ž์ชฝ์—์„œ ์‚ฝ์ž…๋˜๋ฉด ๋’ค์—์„œ ์‚ญ์ œ๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค

์‚ฌ์šฉ ์šฉ๋„

์–ด๋– ํ•œ ์ž‘์—…์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„

์†Œ๊ฐ

  • Dion
    • ๋‹ค ํ•˜๊ณ  ์ ๊ธฐ
  • Ever
    • ๋‹ค ํ•˜๊ณ  ์ ๊ธฐ
  • Hamill
    • ๋‹ค ํ•˜๊ณ  ์ ๊ธฐ
  • Lynn
    • ๋‹ค ํ•˜๊ณ  ์ ๊ธฐ
  • Sunny
    • ํ์—์„  EmptyQueueException()๊ฐ€ ์—†๋‹ค. NoSuchElementException()๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผํ•ด์„œ ์‹ ๊ธฐํ•˜๋‹ค. ์ฒ˜์Œ์— ํ๋ฅผ ๋งŒ๋“  ์‚ฌ๋žŒ์ด Exception์ด๋ฆ„์— Queue๋ฅผ ์ ์ง€ ์•Š์€๊ฑธ ๋ณด๋‹ˆ ํ๊ฐ€ ์Šคํƒ๋ณด๋‹ค ๋œ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‚˜๋ณด๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์ฑ…์— ์˜ํ•˜๋ฉด ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์˜จ๊ฐ– ๊ฐ€์ง€์˜ ๋„์ „์ ์ด๊ณ  ๊ณจ์น˜์•„ํ”ˆ ๋””๋ฒ„๊น… ์ด์Šˆ๋ฅผ ์ˆ˜๋ฐ˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•…๋ช…์ด ๋†’๋‹ค๊ณ  ํ•œ๋‹ค. ์™œ ๊ทธ๋Ÿฐ์ง€๋„ ์ฐพ์•„๋ณด๊ณ  ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ์ฐพ์•„๋ณด์ž.