Queue & Stack

Icarus_wยท2023๋…„ 1์›” 3์ผ
0

CS๊ณต๋ถ€

๋ชฉ๋ก ๋ณด๊ธฐ
24/25

Queue

queue๋Š” ์„ ๋ฆฝ์„ ์ถœ(FIFO) ์ž๋ฃŒ๊ตฌ์กฐ

์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ enqueue O(1), ๋ฐ์ดํ„ฐ ์ถ”์ถœ dequeue O(1) ์ด๋‹ค.

ํ™œ์šฉ ์˜ˆ์‹œ๋กœ๋Š” Cache๊ตฌํ˜„, ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ, ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰(BFS)๊ฐ€ ์žˆ๋‹ค.

image

๊ตฌํ˜„ ๋ฐฉ์‹

  • Array-Based queue

    enqueue์™€ dequeue๊ณผ์ •์—์„œ ๋‚จ๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ƒ๊ธด๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ฃผ๋กœ Circular queue ํ˜•์‹์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.

  • List-Based queue

    ์žฌํ• ๋‹น์ด๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„์˜ ๊ฑฑ์ •์„ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

Stack

stack์€ ํ›„์ž…์„ ์ถœ(LIFO) ์ž๋ฃŒ๊ตฌ์กฐ

์‹œ๊ฐ„๋ณต์žก๋„๋Š” push O(1), pop O(1)์ด๋‹ค.

ํ™œ์šฉ์˜ˆ์‹œ๋Š” ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ• ์—ฐ์‚ฐ, ๊ด„ํ˜ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ์›น ๋ธŒ๋ผ์šฐ์ € ๋ฐฉ๋ฌธ๊ธฐ๋ก, DFS๋“ฑ์ด ์žˆ๋‹ค.

image

Stack 2๊ฐœ๋กœ Queue ๊ตฌํ˜„

enqueue์— ์‚ฌ์šฉํ•  stack instack ๊ณผ dequeue์— ์‚ฌ์šฉํ•  outstack์„ ๊ตฌํ˜„ํ•œ๋‹ค.

  1. enqueue() : instack์— push()ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

  2. dequeue() :

    a. ๋งŒ์•ฝ outstack์ด ๋น„์–ด ์žˆ๋‹ค๋ฉด instack.pop()์„ ํ•˜๊ณ  outstack.push()๋ฅผ ํ•˜์—ฌ instack์—์„œ

    โ€‹ outstack์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธด๋‹ค. ์ด ๊ฒฐ๊ณผ๋กœ ๊ฐ€์žฅ ๋จผ์ € ์™”๋˜ ๋ฐ์ดํ„ฐ๋Š” outstack์˜ top์— ์œ„์น˜ํ•˜๊ฒŒ ๋œ๋‹ค.

    b. outstack.pop()์„ ํ•˜๋ฉด ๊ฐ€์žฅ ๋จผ์ € ์™”๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์ถ”์ถœ๋œ๋‹ค.(FIFO)

Queue 2๊ฐœ๋กœ Stack ๊ตฌํ˜„

push()์— ์‚ฌ์šฉํ•  queue๋ฅผ q1, pop()์— ์‚ฌ์šฉํ•  queue๋ฅผ q2๋ผ๊ณ  ํ•œ๋‹ค.

  1. push() : q1์œผ๋กœ enqueue()ํžˆ์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

  2. pop():

    a. q1์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜๊ฐ€ 1์ดํ•˜๋กœ ๋‚จ์„ ๋•Œ๊นŒ์ง€ dequeue()๋ฅผ ํ•œ ํ›„, ์ถ”์ถœ๋œ ๋ฐ์ดํ„ฐ ๋ฅผ q2์— enqueue()ํ•œ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฐ์ด ํ„ฐ๋Š” q2๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค.

    b. q1์— ๋‚จ์•„ ์žˆ๋Š” ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ dequeue()ํ•ด์„œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜

    c. ๋‹ค์Œ์— ์ง„ํ–‰๋  pop()์„ ์œ„์™€ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด q1, q2์ด๋ฆ„์„ swap

Priority Queue(Heap)

  • ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์€๊ฒƒ์ด ๋จผ์ € ๋‚˜์˜จ๋‹ค.

  • push, pop ๋ชจ๋‘ O(logn)์˜ ์‹œ๊ฐ„๋ณต์žก๋„

  • Heap -> Tree๋กœ ๊ตฌํ˜„ -> Tree์˜ ๋Œ€๋ถ€๋ถ„ linked list๋กœ ๊ตฌํ˜„ -> but, heap์€ Array๋กœ ๊ตฌํ˜„

    -> ์ƒˆ๋กœ์šด ์ธ์ž๊ฐ€ ์–ธ์ œ๋‚˜ ๋งˆ์ง€๋ง‰์— ์œ„์น˜

profile
ํ•˜๋ฃจ์— ํ•˜๋‚˜

0๊ฐœ์˜ ๋Œ“๊ธ€