๋ฐฐ์ด๋ก ๊ตฌํํ Queue์ ๋ฌธ์ ์
Queue๋ ๋ฐฐ์ด๋ก ๊ตฌํํ์์ ๋, ์ฝ์ ๊ณผ ์ญ์ ๋ฅผ ์ฌ๋ฌ๋ฒ ์งํํ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ์์น๊ฐ ์ ์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๊ฒ ๋ฉ๋๋ค.
์ฆ ์ด๋ ๊ฒ ๊ตฌํํ๊ฒ ๋๋ค๋ฉด, ๋ถ๊ฒ ํ์๋ ๋ฐฐ์ด์ ๋น ๊ณต๊ฐ์ ์ฌ์ฉ๋์ง ์์ง๋ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณ์ ์ฐจ์งํจ์ผ๋ก, ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ๋ฐ์์ํต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก Circular Queue๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Circular Array Queue
๊ธฐ์กด์ Queue์ ๋๋ถ๋ถ ๋น์ทํ์ง๋ง, ๋ฐฐ์ด์ ๋์ด ๋ฐฐ์ด์ ์ฒ์๊ณผ ๋ถ์ด ์๋ ๊ฒ์ผ๋ก ์๊ฐํฉ๋๋ค.
์ฆ ๋ค์๊ณผ ๊ฐ์ ๋ฐ์ง ํํ๋ฅผ ์๊ฐํ์๋ฉด ์ดํดํ๊ธฐ ์ข์ต๋๋ค.
Circular Queue์ ์ฝ์ ๊ณผ ์ญ์
์ฆ ์์ ๊ฐ์ด Circular Queue๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฐ์ด์ ๋ชจ๋ ๊ณต๊ฐ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐฐ์ด๋ก ๊ตฌํํ Circular Queue์ ์ฉ๋๊ณผ ๋ฐฐ์ด์ ์ต๋ ๊ธธ์ด์ ๊ด๊ณ
Circular Queue๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฐ์ด์ด ๊ฐ๋ ์ฐผ๋์ง, ์๋๋ฉด ๋น์ด์๋ ์ํ์ธ์ง๋ฅผ ํ์ ํ๊ธฐ ์ด๋ ต์ต๋๋ค.
์ฌ์ด ์์๋ฅผ ์ํด ์ญ์ ๊ฐ ๋ฐ์ํ์ง ์๊ณ , ์ค๋ก์ง ์ฝ์ ๋ง ๋ฐ์ํ๋ ์ฉ๋(capacity) 3์ Circular Queue๋ฅผ ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค.
๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ์ฝ์ ํ ๊ฒฝ์ฐ rear์ ๋ค์ ์ด๊ธฐ ์ํ๋ก ๋์๊ฐ๋๋ค.
์ฆ ์ด๊ธฐ ์ํ์ ๊ฒฝ์ฐ front == rear์ด๊ธฐ ๋๋ฌธ์ ๋น์ด์๋ ์ํ์ด์ง๋ง,
๋ฐฐ์ด์ด ๊ฐ๋ ์ฐฌ ๊ฒฝ์ฐ์๋ front == rear์ ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Circular Queue์์๋ ๋ฐฐ์ด์ ๋ง์ง๋ง ์นธ์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ Queue์ ๋์ผํ ์ฉ๋์ ์ ์ฅํ๊ธฐ ์ํด์๋, ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ capacity + 1๋ก ํด์ฃผ์ด์ผ ํฉ๋๋ค.
๊ฐ๋ ์ฐผ๋์ง์ ์ฌ๋ถ๋ rear์ ๋ค์ ์์น๋ฅผ, Circular Queue์ ๋ฐฐ์ด์ ๊ธธ์ด, ์ฆ ์ฉ๋ + 1๋ก ๋๋ ๋๋จธ์ง๊ฐ front์ ๋์ผํ์ง๋ฅผ ๊ฒ์ฌํ๋ฉด ๋ฉ๋๋ค.
์ ๋ฆฌํ์๋ฉด Circular Queue์ ์ ์ฅํ๊ณ ์ถ์ ์์์ ์ต๋ ๊ฐ์๋ฅผ capacity๋ผ๊ณ ํ๋ฉด, ๋ฐฐ์ด์ ๊ธธ์ด๋ ์ด๋ณด๋ค 1 ์ปค์ผ ํฉ๋๋ค.
์ฆ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ maxLength๋ผ ์ ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
this.maxLength = this.capacity + 1;
๋ค์ ์์น ๊ณ์ฐ๋ฒ
๊ธฐ์กด Queue์์๋ ๋จ์ง rear๋ฅผ 1๋ง ์ฆ๊ฐ์์ผ์ฃผ๋ฉด ๋์์ต๋๋ค.
๊ทธ๋ฌ๋ ํํ ํ์์๋ ์ถ๊ฐ์ ์ธ ์์ ์ด ํ์ํ๋ฐ,
rear์ 1 ์ฆ๊ฐ์์ผฐ์ ๋ rear์ ํฌ๊ธฐ๊ฐ ๋ฐฐ์ด์ ์ต๋ ๊ธธ์ด์ ๋์ผํ๋ค๋ฉด rear์ 0์ผ๋ก ๋ฐ๊พธ์ด ์ฃผ์ด์ผ ํฉ๋๋ค.
์ฆ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
this.rearIdx = (this.rearIdx + 1) % this.maxLength;
์ด๊ธฐํ ๋ฐฉ๋ฒ
๊ธฐ๋ณธ ํ์ ๊ฐ์ด rear๊ณผ front๋ฅผ 0์ผ๋ก ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
this.frontIdx = 0;
this.rearIdx = 0;
Empty ์กฐ๊ฑด
๊ธฐ์กด Queue์ ๋์ผํ๊ฒ front์ rear์ ์์น๊ฐ ๋์ผํ๋ค๋ฉด ๋น์๋ค๊ณ ํ๋จํฉ๋๋ค.
this.frontIdx == this.rearIdx;
Full ์กฐ๊ฑด
์์์ ์ดํด๋ณด์๋ฏ์ด ๋ฐฐ์ด์ ์ต๋ ๊ธธ์ด์์, 1๊ฐ๊ฐ ๋ ์ฐฌ ์ํ๋ฅผ Full๋ก ์๊ฐํฉ๋๋ค.
์ฆ ๋ค์๊ณผ ๊ฐ์ด rear์ 1๊ฐ๋ฅผ ๋ํ์ ๋, ํด๋น ์์น๊ฐ front์ ๊ฐ์ผ๋ฉด ๊ฐ๋ ์ฐฌ ์ํ์ ๋๋ค.
((this.rearIdx + 1) % this.maxLength) == this.frontIdx;
์๋ฐ๋ก ๊ตฌํ
https://ttl-blog.tistory.com/697
'๐ฅ Computer Science > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] - ํธ๋ฆฌ(Tree)[3] - ์ด์ง ํธ๋ฆฌ(Binary Tree) (0) | 2022.06.05 |
---|---|
[์๋ฃ๊ตฌ์กฐ] - ํธ๋ฆฌ(Tree)[2] - ํธ๋ฆฌ์ ํํ (0) | 2022.06.04 |
[์๋ฃ๊ตฌ์กฐ] - ํธ๋ฆฌ(Tree)[1] - ํธ๋ฆฌ์ ์ ์์ ์ฉ์ด (0) | 2022.06.04 |
[์๋ฃ๊ตฌ์กฐ] - ํ(Queue) (0) | 2022.05.07 |
[์๋ฃ๊ตฌ์กฐ] - ์คํ(Stack) (0) | 2022.05.07 |