ํ (Queue)
- FIFO(First In First Out) ์ ๊ธฐ์ค์ผ๋ก ๋ง๋ค์ด์ง ์๋ฃ๊ตฌ์กฐ๋ค. ( ๋จผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ๋ค )
- ๋ฐ์ดํฐ์ ์ฝ์ ํ๋ ๋ถ๋ถ์ rear ์ญ์ ํ๋ ๋ถ๋ถ์ fornt ๋ผ ๋ถ๋ฅธ๋ค.
- ํ์ ์ข ๋ฅ๋ ์ ํ ํ(Linear Queue), ์ํ ํ(Circular Queue) ๋ฑ์ด ์๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ง์ด๋ฃ๋ enqueue, ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ dequeue ๋ฑ์ ์์ ์ ํ ์ ์๋ค.
- ํ๋ ์์๋๋ก ์ฒ๋ฆฌํด์ผ ํ๋ ์์ ์ ์์๋ก ์ ์ฅํด๋๋ ๋ฒํผ(buffer)๋ก ๋ง์ด ์ฌ์ฉํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์ push, shift๋ก ๊ตฌํ์ด ๊ฐ๋ฅํ๋ shift์ ์๊ฐ ๋ณต์ก๋๋ ์ต๋ O(n)์ด๋ ์ฃผ์ํ์.
const arr = [];
//enqueue
arr.push('test1');
arr.push('test2');
arr.push('test3');
console.log(arr) // ['test1','test2','test3']
//dequeue
arr.shift();
console.log(arr) ['test2','test3']
์ ํ ํ (Linear Queue)
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ํ์ ํํ๋ค.
- ๋ง๋ ๋ชจ์์ ํ๋ก ํฌ๊ธฐ๊ฐ ์ ํ๋์ด ์๊ณ ๋น ๊ณต๊ฐ์ ์ฌ์ฉํ๋ ค๋ฉด ์๋ฃ๋ฅผ ๋ชจ๋ ๊บผ๋ด๊ฑฐ๋ ์๋ฃ๋ฅผ ํ์นธ ์ฉ ์ฎ๊ฒจ์ผ ํ๋ค.
- ์ด๋ฐ ์ ํํ์๋ ๋ฌธ์ ๊ฐ ์๋๋ฐ enqueue ์ dequeue ๋ฅผ ๋ฐ๋ณตํ๋ค ๋ณด๋ฉด rear๊ฐ max-size์ ๋๋ฌํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ ์ถ๊ฐํ ์ ์๋ค. (๊ฐ๋ฅ์ ํ๋ ๋นํจ์จ์ ) ๊ทธ๋ฐ ์ ์ ๋์์ผ๋ก ๋์จ ๊ฒ์ด ์ํ ํ ์ด๋ค.
์ํ ํ (Circular Queue)
- ์ ํ ํ์ ๋จ์ ์ ๋์์ผ๋ก ๋์จ๊ฒ์ด ์ํ ํ์ด๋ค.
- front ์ rear ๊ฐ ๊ฐ์ ์์น์์ ์์ํ๋ค.
- ์ํ ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉํฅ์ด ์๋ ๊ตฌ์กฐ์ด๋ค. ๋์ ํ์ ํฌ๊ธฐ๊ฐ ์ง์ ๋์ด ์์ด์ผ ํ๊ณ front์ rear์ ์์น๋ฅผ ๊ณ์ฐํด ํ๋์ ๋น๊ณต๊ฐ์ ๋จ๊ฒจ์ผ ํ๋ค. ( size๊ฐ 6์ด๋ฉด ์ค์ ์ฌ์ฉํ ์ ์๋ ๊ณต๊ฐ์ 5๋ค. )
- enqueue๋ rear = (rear + 1 ) % size ์ด๋ค. ํ size์ ๋๋จธ์ง๋ฅผ ์ฐ์ฐํจ์ผ๋ก ๊ณ์ ๋์๊ฐ ์ ์๋๋ก ํ๋ค.
- dequeue๋ front = (front + 1 ) % size ์ด๋ค. ํ size์ ๋๋จธ์ง๋ฅผ ์ฐ์ฐํจ์ผ๋ก ๊ณ์ ๋์๊ฐ ์ ์๋๋ก ํ๋ค.
- ํ์ ์คํ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์์๋ฆฌ์ ๊ด๊ณ๊ฐ ์๋๋ฐ ์คํ๊น์ง ๊ณต๋ถํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์์ ๋ฐ๋ก ์ ๋ฆฌํ ์์ ์ด๋ค.
'์๊ณ ๋ฆฌ์ฆ & ๋ฌธ์ ํ์ด > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ (stack) (1) | 2022.10.04 |
---|