ํ
์คํ์ด๋์ ๋ฐ๋๋ก ๋จผ์ ๋ค์ด๊ฐ๊ฒ์ด ๋จผ์ ๋์ค๋ ์๋ฃ๊ตฌ์กฐ.
FIFO - Fist In First Out.
push์ pop ๋์ EnQueue์ DeQueue๋ฅผ ์ฌ์ฉ.
push๊ฐ ๋งจ ์์ ๋ฃ๊ธฐ๋ผ๋ฉด, EnQueue๋ ๋งจ ๋ค์ ๋ฃ๊ธฐ.
pop๊ณผ DeQueue๋ ๋ชจ๋ ๋งจ ์์์ ์ ๊ฑฐํ๊ธฐ.
์ด๋ ์ด๋ก ๊ตฌํ
์ํ
์คํ์์๋ ๋ค์ด๊ฐ๋ ์ชฝ๊ณผ ๊บผ๋ด๋ ์ชฝ์ ๋ฐฉํฅ์ด ๋๊ฐ๋ค.
ํ์ง๋ง ํ๋ ๋ค์ด๊ฐ๋๊ฑด ๋ค์์ ๋ค์ด๊ฐ๊ณ , ๊บผ๋ผ๋๋ ์์์ ๊บผ๋ธ๋ค. ๋ฐฉํฅ์ด ๋ค๋ฅด๋ค.
๊ทธ๋์ ์ผ๋ฐ ์ด๋ ์ด๋ก ํ๋ฅผ ๊ตฌํํ๋ฉด, ๋ฐฐ์ด์ ์ ๊ณต๊ฐ์ด ๋ญ๋น๋ ์ ์๋ค. ๊ธธ์ด 5์ ์ด๋ ์ด [1,2,3,4,5]
์์ 1๊ณผ 2๊ฐ ๋น ์ง๋ฉด [ , ,3,4,5]
๊ฐ ๋๋ค.
์ธํ๋ ๋ค์์๋ถํฐ ๋ฃ๊ธฐ๋๋ฌธ์, ๋ค์ ๊ณต๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ๋์ด์ ๋ฃ์ ์ ์๊ฒ ๋๋ค(์์ ๋ ์๋ฆฌ๊ฐ ๋น์ด์์์๋ ๋ถ๊ตฌํ๊ณ ).
๊ทธ๋์ (๊ฐ๋ ์ ์ผ๋ก)์ ํ์ด ์๋ ์ํ์ธ ์ด๋ ์ด๋ฅผ ์ฌ์ฉํ๋ค.
์ด๊ฑธ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ front, rear ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์ฒ์์ ์ด๋ ์ด๋ฅผ ๋ง๋ค๋ front,rear ๋ชจ๋ -1์ผ๋ก ํ ๋นํ๋ค. (๋น์ด์์์ ๋ํ๋ด๊ธฐ ์ํด์)
์ธํ
์๋ฆฌ๋ ๊ฐ๋จํ๋ค. ํญ์ rear์ ์์์ ๊ฐ์ ๋ฃ๋๊ฒ.arr[rear] = var
.
- ์ผ๋จ ํ๊ฐ ๊ฝ ์ฐจ์๋์ง ํ์ธํ๋ค. (๋ฐฉ๋ฒ์ ๋ฐ์์)
rear = rear + 1
(๋ฐ์์ ๋ค์ ํ์ธ)arr[rear]
์๋ฆฌ์ ๊ฐ์ ์ฝ์
๋ํ
์ ๊ฑฐํ ๋๋ ๋ฐ๋๋ก ํญ์ front์ ์์์์ ๊ฐ์ ์ ๊ฑฐํ๋๊ฒ.
- ์ผ๋จ ํ๊ฐ ๋น์ด์๋์ง ํ์ธํ๋ค. (๋ฐฉ๋ฒ์ ๋ฐ์์)
front = front +1;
(๋ฐ์์ ๋ค์ ํ์ธ)arr[front
]์ ์๋ ๊ฐ์ ๋ฐํ.
ํ๊ฐ ๊ฝ ์ฐจ์๋์ง, ๋น์ด์๋์ง ํ์ธ (๋ชจ๋๋ฌ)
๋ณดํต์ rear - front
๋ฅผ ํ๋ฉด ์ด๋ ์ด ์์ ๋ช๊ฐ์ ๊ฐ์ด ์๋์ง ํ์ธํ ์์๊ฒ ์ง๋ง,
๋ง์ฝ์ ํ๋ฐํด ์ด์ ๋์๊ฐ์ rear < front
์ธ ์ํฉ์์ ์ด๋ป๊ฒ ํ ๊น?
[5, ,2,3,4]
๊ฝ ์ฐจ์๋ ์ํฉ์์ rear๊ฐ 0์ด๊ณ front๊ฐ 2์ด๋ผ๊ณ ๊ฐ์ .
์ด์ ๋ค์ ์ฐจ๋ก๋๊น rear++๊ฐ ๋ผ์ rear๋ 1์ด ๋๊ณ , ์ฌ๊ธฐ์ ์ด๋ ์ด์ ํฌ๊ธฐ์ธ 5๋ฅผ ๋ํด์ 6-2 = 4 ๋๊น ๋น์ด์๋ ์๋ฆฌ๊ฐ ํ๋ ์๋๊ฑธ ์ ์ ์๋ค. ์ฆ rear % arr.length
๋ฅผ ํด์ ๊ฑฐ๊ธฐ์ front๋งํผ ๋นผ์ฃผ๋ฉด ๋๋๊ฒ.
์ ๋ฆฌํ์๋ฉด if((rear+1) % arr.length - front==0)
์ ์กฐ๊ฑด์ด ์ฐธ์ด๋ฉด ํ๊ฐ ๊ฝ ์ฐจ์๋์ง ํ์ธํ ์ ์๋ค.
๊ทธ๋์ ์ฌ์ค ์์์ ์ธํ(rear ์ฆ๊ฐ)๊ณผ ๋ํ(front ์ฆ๊ฐ)๊ณผ์ ์์ rear,front๋ฅผ ์ฆ๊ฐ์ํฌ ๋ ๋ชจ๋๋ฌ ๊ณ์ฐ์ ๋ฃ์ด์ค์ผ ํ๋ค.
rear = (rear + 1) % arr.length
front = (front + 1) % arr.length
๋น์ด์๋์ง ํ์ธ์ ์ด๋ป๊ฒ ํ ๊น?
๋น์ด์๋ค๋๊ฑด front๊ฐ(๋ง์ง๋ง์ผ๋ก ๋ํํ ํ์ ์ธ๋ฑ์ค)์ด rear(๋ง์ง๋ง์ผ๋ก ์ธํํ ํ์ ์ธ๋ฑ์ค)๊ฐ ๊ฐ๋ค๋ ๊ฒ๊ณผ ๊ฐ๋ค.
๋น์ด์๋์ง ํ์ธ์ ๋ํํ๊ธฐ ์ ์ ํ๋๊ฒ์ด๋๊น [ , , ,1, ]
๋ฅผ ๋ํํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
๋ง์ง๋ง ์ธํํ ํ์ rear๋ 3์ผ๊ฒ์ด๊ณ ,
๋ง์ง๋ง ๋ํํ ํ์ front๋ 2์ผ๊ฒ์ด๋ค.
rear != front์ด๋ ๋ํ ๊ณผ์ ์ ์งํํ ์ ์๋ค.
(front + 1 ) % 5
๋ฅผ ํ๋ฉด 3์ด ๋๋ค. ๊ทธ๋ฆฌ๊ณ 1์ ๋ฐํํ๊ณ ์ ๊ฑฐ.
์ด์ ๋ค์ ๋ ๋ํ๋ฅผ ์๋ํด๋ณด๋ฉด front == rear ๋ถ๊ฐ๋ฅํ๊ณ ์ค์ ๋ก ์ด๋ ์ด๋ ๋น์ด์๋ค.
์ด์ ์๊ฐ์๋ ์ผ๋ฐ ์ด๋ ์ด๋ก ์ํ ์ด๋ ์ด๋ฅผ ๋ง๋ค์ด ํ๋ฅผ ๊ตฌํํ๋ค.
์ํ ์ด๋ ์ด๋ front์ rear ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ ๊ฐ๋
์ ์ผ๋ก ๊ตฌํํ ์ด๋ ์ด๋ค.
์ง์ธ๋(๋ํ)๋ง๋ค front ํฌ์ธํฐ์ ๊ฐ์ด ์ฆ๊ฐํ๊ณ ์ถ๊ฐํ ๋(์ธํ) ๋ง๋ค rear๊ฐ์ด ์ฆ๊ฐํ๋ค.
๋์ ๋ฐฐ์ด๋ก ๊ตฌํ
์ ์ ๋ฐฐ์ด๋ก ๊ตฌํํ ํ์์ (rear + 1) % arr.length === front
์ผ๋ ํ๊ฐ ๋ค ์ฐผ๋ค๋๊ฑธ ์ ์ ์๋ค.
์ํ ์ด๋ ์ด์์ ๋น ๊ณต๊ฐ์ ์ถ๊ฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
์ผ๋ฐ ์ ํ ๋ฐฐ์ด์์๋ ๊ทธ๋ฅ ์๋ก์ด 2๋ฐฐ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ์์์๋ถํฐ ํ๋์ฉ ๋ณต์ฌ๋ฅผ ํ๋ฉด ๋์๋๋ฐ.
front > rear์ธ ๊ฒฝ์ฐ (๋ฐ๋๋ก rear > front์ธ ๊ฒฝ์ฐ๋ ์ ์ด์ ๋ฌธ์ ๊ฐ ์๋ค)
- ์๋ก์ด 2๋ฐฐ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ๋ง๋ค๊ณ
- 0๋ถํฐ rear๊น์ง size(๋ณต์ฌ ์ ์๋ ๋ฐฐ์ด์ ํฌ๊ธฐ)+i ์ ์์น์ ๋ณต์ฌ.
- rear = rear + size ๋ก rear ํฌ์ธํฐ๋ฅผ ๋ฐฐ์ด ๋์ผ๋ก.
์ด๋ ๊ฒ ํ๋ฉด[c,d,e,a,b] rear=2 front3
์์[c,d,e,a,b,c,d,e, , ]
๊ฐ ๋๋ค.
์์ ์๋ c,d,e๋ front ์์ ์์ผ๋ ์ฌ์ค์ ์ง์์ง๊ฒ ์ทจ๊ธ์ด ๋๋ค (๋ค์์ ์ธํ๋ฅผ ํ ๋ ๋ฎ์ด์์์ง ํ ๋๊น).
์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ตฌํ
๋ง์ฐฌ๊ฐ์ง๋ก ํฌ์ธํฐ๊ฐ ๋ ๊ฐ ํ์ํ๋ค. front์ rear.
์ฝ์
- ์๋ก์ด ๋ ธ๋ ์์ฑ, ๊ฐ ์ ๋ ฅ
- ์๋ก์ด ๋ ธ๋์ nextํฌ์ธํฐ์ null ์ ๋ ฅ
- ํ๊ฐ ๋น์ด์๋ค๋ฉด (
rear===null
)front์ rear ๋ชจ๋ ์ด ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค. - ํ๊ฐ ๋น์ด์์ง ์๋ค๋ฉด rear๊ฐ ์๋ก์ด ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค.
์ญ์
- ํ๊ฐ ๋น์ด์๋์ง ํ์ธ (
rear===null
) temp
์์๋ณ์์ front ๊ฐ์ ๋ฃ์ด์ค๋ค.- ํ์ front ํฌ์ธํฐ๋ฅผ ๋งจ ์ ๋ ธ๋์ next๊ฐ์ผ๋ก ๋ณ๊ฒฝ.
- front๊ฐ null์ด๋ผ๋ฉด, ์ฆ ํ๊ฐ ๋น์ด์๊ฒ ๋๋ค๋ฉด rear๋ null๋ก ์ค์ .
- ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ค์์ ์ธํ๋ฅผ ํ ๋ ์ํ ๋ ธ๋๋ฅผ ์ฐพ๊ฒ๋๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
free(temp)