the little guide of queue in javascrip - Lee-hyuna/33-js-concepts-kr GitHub Wiki

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 큐

원문: The Little Guide of Queue in JavaScript

νλŠ” κ°„λ‹¨ν•œ 데이터 ꡬ쑰이닀. μš”μ†Œλ₯Ό λ’€μͺ½(tail)μ—μ„œ μΆ”κ°€ μ•žμͺ½(head)μ—μ„œ μ‚­μ œν•  수 μžˆλ‹€.

이 λ™μž‘μ„ μ„ μž… μ„ μΆœ (First In First Out )이라고 ν•œλ‹€.

/resource/yongkwan/28/01.png

νλŠ” μ„ ν˜•(linear) 데이터 ꡬ쑰이닀. 맀우 μ€‘μš”ν•œ κ°œλ…μ€ κ°€μž₯ 였래된 μš”μ†Œλ₯Ό λ¨Όμ € μ‚­μ œν•œλ‹€λŠ” 것이닀.

/resource/yongkwan/28/02.png

μ‘μš©

  • νλŠ” 첫 번째 ν•­λͺ©λΆ€ν„° μˆœμ„œλŒ€λ‘œ 객체λ₯Ό 관리해야 ν•  λ•Œλ§ˆλ‹€ μ‚¬μš©λœλ‹€.
  • 예λ₯Όλ“€μ–΄ ν”„λ¦°ν„°μ˜ λ¬Έμ„œ 좜λ ₯, λŒ€κΈ°μžλ“€κ²Œ μ°¨λ‘€λŒ€λ‘œ μ‘λ‹΅ν•˜λŠ” 콜 μ„Όν„° μ‹œμŠ€ν…œλ“±μ΄ μžˆλ‹€.

생성

  • λ°°μ—΄ λ˜λŠ” λ§ν¬λ“œ 리슀트 μ‚¬μš©ν•˜μ—¬ 큐λ₯Ό κ΅¬ν˜„ν•  수 μžˆλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” shift 및 popκ³Ό 같은 λ°°μ—΄ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆμœΌλ―€λ‘œ *큐**λ₯Ό λ§Œλ“œλŠ” 것은 맀우 κ°„λ‹¨ν•˜λ‹€.

κΈ°μ–΅ν•˜κΈ°

  • unshift: μš”μ†Œλ₯Ό λ°°μ—΄μ˜ 맨 μ•žμ— μΆ”κ°€ν•œλ‹€.
  • pop: λ°°μ—΄μ˜ λ§ˆμ§€λ§‰ μš”μ†Œλ₯Ό μ œκ±°ν•œλ‹€.

κ΅¬ν˜„ν•˜κΈ°

λ¨Όμ € κ°€μž₯ λ¨Όμ € ν•  일은 빈 배열을 가진 큐 μƒμ„±μž ν•¨μˆ˜λ₯Ό λ§Œλ“œλŠ” 것이닀.

function Queue() {  
	this.data = [];  
}

thisλŠ” μš°λ¦¬κ°€ λ§Œλ“  객체λ₯Ό κ°€λ¦¬μΌœμ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μ‚¬μš©ν•œλ‹€λŠ” 것을 κΈ°μ–΅ν•˜λΌ.

λ©”μ„œλ“œ

μ£Όμš” λ©”μ„œλ“œλŠ” add와 removeκ°€ μžˆλ‹€.

Queue.prototype.add = function(record) {  
  this.data.unshift(record);  
}

Queue.prototype.remove = function() {  
  this.data.pop();  
}

μΆ”κ°€λ‘œ 3개의 보쑰 λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•œλ‹€.

Queue.prototype.first = function() {  
  return this.data[0];  
}

Queue.prototype.last = function() {  
  return this.data[this.data.length - 1];  
}

Queue.prototype.size = function() {  
  return this.data.length;  
}

그러면 μ•„λž˜μ™€ 같은 κ²°κ³Όλ₯Ό 얻을 수 μžˆλ‹€.

const q = new Queue():  
q.add(1);  
q.add(2);  
q.add(3);  
console.log(q);

/resource/yongkwan/28/03.png

κ°€μž₯ 였래된 μš”μ†ŒλŠ” 1을 제일 λ¨Όμ € μΆ”κ°€ν–ˆκΈ° λ•Œλ¬Έμ— 1이닀.

λͺ» 믿겠으면 last λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 확인 ν•  수 μžˆλ‹€.

console.log(q.first());  
// -> 3
console.log(q.last());  
// -> 1

λ˜ν•œ remove λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ κ°€μž₯ 였래된 μš”μ†ŒμΈ 1이 μ œκ±°λœλ‹€.

q.remove();  
console.log(q);

/resource/yongkwan/28/04.png

λ§ˆμ§€λ§‰μœΌλ‘œ size λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ κ²°κ³ΌλŠ” μ•„λž˜μ™€ κ°™λ‹€.

console.log(q.size())  
// -> 2

λ§ˆμ§€λ§‰ μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  ν˜ΈμΆœν–ˆκΈ° λ•Œλ¬Έμ— 2κ°€ λ°˜ν™˜λœλ‹€.

μ™„μ „ν•œ 예제: https://github.com/germancutraro/Queue-Data-Structure