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๋ฅผ ์ ์ง ์์๊ฑธ ๋ณด๋ ํ๊ฐ ์คํ๋ณด๋ค ๋ ์ค์ํ๋ค๊ณ ์๊ฐํ๋๋ณด๋ค. ์๊ณ ๋ฆฌ์ฆ์ฑ ์ ์ํ๋ฉด ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ ํ๋ก๊ทธ๋๋ฐ์ ์จ๊ฐ ๊ฐ์ง์ ๋์ ์ ์ด๊ณ ๊ณจ์น์ํ ๋๋ฒ๊น ์ด์๋ฅผ ์๋ฐํ๋ ๊ฒ์ผ๋ก ์ ๋ช ์ด ๋๋ค๊ณ ํ๋ค. ์ ๊ทธ๋ฐ์ง๋ ์ฐพ์๋ณด๊ณ ์ฐ๊ฒฐ๋ฆฌ์คํธ๊ฐ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๋์ง ์ฐพ์๋ณด์.