๐Queue(ํ)
Queue์ ์ ์
์ ์ถ(First In First Out: LIFO)์ ์๋ฃ๊ตฌ์กฐ
๋จผ์ ์
๋ ฅ๋ ๊ฐ์ด ์ ์ผ ๋จผ์ ์ถ๋ ฅ์ด ๊ฐ๋ฅํ ์๋ฃ๊ตฌ์กฐ
Stack๊ณผ ๋ค๋ฅด๊ฒ ์ค์ํ Keyword๋ #Front
์ #Rear
์ด๋ค.
๊ทธ๋ฆฌ๊ณ Stack์์๋ ๋ฐ์ดํฐ ์
๋ ฅ๊ณผ ์ถ๋ ฅ์ด Push/Pop์ด์์ง๋ง,
Queue์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ฃผ๋ ๊ธฐ๋ฅ์ #Enqueue
, ๋ฐ์ดํฐ๋ฅผ ๋ด๋ณด๋ด๋ ๊ธฐ๋ฅ์ #Dequeue
Queue(ํ)๊ฐ ์คํ๋ ๋ ์ถ์์ ์ด๋ฏธ์ง
Queue์ ๊ฒฝ์ฐ
๋ฐ์ดํฐ๋ฅผ ์๋ ๊ฒ์ ๋ฐฐ์ด ๋ฉ์๋๋ Push / ๋นผ๋ด๋ ๊ฒ์ Shift
Rear - Queue์ ๋ท๋ถ๋ถ์ ๋ปํ๋ค.
๋ฐ์ดํฐ๊ฐ ์ฝ์
๋ ์ Rear๋ ํ์นธ์ฉ ๋ค๋ก ์์นํ๋ค.
Front - Queue์ ์๋ถ๋ถ์ ๋ปํ๋ค.
๋ฐ์ด๊ฑฐ ์ญ์ ๋๋ฉด Front๊ฐ ํ์นธ์ฉ ๋ค๋ก ์์นํ๋ค.
> ๐ฑโ๐์ฌ์ฉ ์ฌ๋ก
๋๋น ์ฐ์ ํ์(BFS, Breadth-First Search) ๊ตฌํ (์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ ํ์)
์ฒ๋ฆฌํด์ผ ํ ๋
ธ๋์ ๋ฆฌ์คํธ๋ฅผ ์ ์ฅํ๋ ์ฉ๋๋ก ํ(Queue)๋ฅผ ์ฌ์ฉ
๋
ธ๋๋ฅผ ํ๋ ์ฒ๋ฆฌํ ๋๋ง๋ค ํด๋น ๋
ธ๋์ ์ธ์ ํ ๋
ธ๋๋ค์ ํ์ ๋ค์ ์ ์ฅ
๋
ธ๋๋ฅผ ์ ๊ทผํ ์์๋๋ก ์ฒ๋ฆฌ
์บ์(Cache) ๊ตฌํ
์ฅ์ : ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅ๋ ์์๋๋ก ์ฒ๋ฆฌํด์ผ ํ ์ํฉ์ ์ ๋ฆฌ(ex. ์ํ ์์ ๋จ๋ง๊ธฐ)
๋จ์ : ํฌ๊ธฐ๊ฐ ์ ํ์ , ํ์ ์๋ถ๋ถ์ด ๋น์ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
๋ถ๊ฐ๋ฅ
๐Queue(Pseudo Code)
var QueueArr = [];
QueueArr.push(element1);
QueueArr.push(element2);
QueueArr.shift();
console.log(QueueArr);
QueueArr.length;
๐Queue(functional)
const Queue = function() {
const someInstance = {};
let front = 0;
let rear = 0;
let count = 0;
const storage = {};
someInstance.enqueue = function(value) {
storage[rear] = value;
rear++;
count++;
};
someInstance.dequeue = function() {
if (count > 0) {
var deValue = storage[front];
delete storage[front];
front++;
count--;
return deValue;
}
};
someInstance.size = function() {
return count;
};
return someInstance;
};