queue๋ ์ ๋ฆฝ์ ์ถ(FIFO) ์๋ฃ๊ตฌ์กฐ
์๊ฐ๋ณต์ก๋๋ ๋ฐ์ดํฐ ์ถ๊ฐ enqueue O(1), ๋ฐ์ดํฐ ์ถ์ถ dequeue O(1) ์ด๋ค.
ํ์ฉ ์์๋ก๋ Cache๊ตฌํ, ํ๋ก์ธ์ค ๊ด๋ฆฌ, ๋๋น์ฐ์ ํ์(BFS)๊ฐ ์๋ค.
๊ตฌํ ๋ฐฉ์
Array-Based queue
enqueue์ dequeue๊ณผ์ ์์ ๋จ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๊ธด๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ์ค์ด๊ธฐ ์ํด ์ฃผ๋ก Circular queue ํ์์ผ๋ก ๊ตฌํํ๋ค.
List-Based queue
์ฌํ ๋น์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น์ ๊ฑฑ์ ์ ํ ํ์๊ฐ ์๋ค.
stack์ ํ์ ์ ์ถ(LIFO) ์๋ฃ๊ตฌ์กฐ
์๊ฐ๋ณต์ก๋๋ push O(1), pop O(1)์ด๋ค.
ํ์ฉ์์๋ ํ์ ํ๊ธฐ๋ฒ ์ฐ์ฐ, ๊ดํธ ์ ํจ์ฑ ๊ฒ์ฌ, ์น ๋ธ๋ผ์ฐ์ ๋ฐฉ๋ฌธ๊ธฐ๋ก, DFS๋ฑ์ด ์๋ค.
Stack 2๊ฐ๋ก Queue ๊ตฌํ
enqueue์ ์ฌ์ฉํ stack instack ๊ณผ dequeue์ ์ฌ์ฉํ outstack์ ๊ตฌํํ๋ค.
enqueue() : instack์ push()ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
dequeue() :
a. ๋ง์ฝ outstack์ด ๋น์ด ์๋ค๋ฉด instack.pop()์ ํ๊ณ outstack.push()๋ฅผ ํ์ฌ instack์์
โ outstack์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธด๋ค. ์ด ๊ฒฐ๊ณผ๋ก ๊ฐ์ฅ ๋จผ์ ์๋ ๋ฐ์ดํฐ๋ outstack์ top์ ์์นํ๊ฒ ๋๋ค.
b. outstack.pop()์ ํ๋ฉด ๊ฐ์ฅ ๋จผ์ ์๋ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ์ถ์ถ๋๋ค.(FIFO)
Queue 2๊ฐ๋ก Stack ๊ตฌํ
push()์ ์ฌ์ฉํ queue๋ฅผ q1, pop()์ ์ฌ์ฉํ queue๋ฅผ q2๋ผ๊ณ ํ๋ค.
push() : q1์ผ๋ก enqueue()ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
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๋ก ๊ตฌํ
-> ์๋ก์ด ์ธ์๊ฐ ์ธ์ ๋ ๋ง์ง๋ง์ ์์น