Front, 맨 뒤를 RearEnQueue, 요소 빼기는 DeQueue
class Queue{
constructor(){
this.queue = [];
this.front = 0;
this.rear = 0;
}
enqueue(value){
this.queue[this.rear++] = value; //rear 영역에 값을 넣고 rear인덱스를 하나 증가
}
dequeue(){
const value = this.queue[this.front];
delete this.queue[this.front];
this.front++;
return value;
}
peek(){ //큐의 가장 앞에 있는 값 알아내기
return this.queue[this.front];
}
size(){ //큐의 길이는 끝 - 처음
return this.rear - this.front;
}
}
const q = new Queue();
class Node{
constructor(value){
this.value = value;
this.next = null;
}
}
class Queue{
constructor(){
this.head = null;
this.tail = null;
this.size = 0;
}
enqueue(newValue){
const newNode = new Node(newValue);
if(this.head === null){
this.head = this.tail = newNode; //이렇게 써도 된다..
}else{
this.tail.next = newNode;
this.tail = newNode;
}
this.size++;
}
dequeue(){
const value = this.head.value;
this.head = this.head.next;
this.size--;
return value;
}
peek(){
return this.head.value;
}
}
const q = new Queue();
🤐 shift 함수는 쓰지 말자!
shift는 O(n)의 시간이 걸리기 때문에 큐의 기능을 정확히 수행하지 못한다.
class Queue{
constructor(maxSize){
this.maxSize = maxSize; //큐의 크기 제한
//리어나 프론트가 크기를 벗어나면 다시 0번 인덱스부터(원형)
this.queue = [];
this.front = 0;
this.rear = 0;
this.size = 0;
}
enqueue(value){
if(this.isFull()){
console.log("꽉 찼다.");
return;
}
this.queue[this.rear] = value;
this.rear = (this.rear + 1) % this.maxSize;
this.size++;
}
dequeue(){
const value = this.queue[this.front];
delete this.queue[this.front];
this.front = (this.front + 1) % this.maxSize;
this.front++;
return value;
}
isFull(){ //큐가 꽉 찼는지 확인하는 함수
return this.size === this.maxSize;
}
peek(){ //큐의 가장 앞에 있는 값 알아내기
return this.queue[this.front];
}
size(){ //큐의 길이는 끝 - 처음
return this.rear - this.front;
}
}
const q = new Queue(3);



😀 해시 테이블을 사용한다면?
이름을 키로 사용하여 O(1)만에 찾을 수 있다.
const hash = [];
hash["key"] = 1;
hash["key1"] = 2;
console.log(hash["key1"]); // 2
hash["key1"] = 100;
console.log(hash["key1"]); //100
delete hash["key1"];
console.log(hash["key1"]); //undefined
const hash = {};
hash["key"] = 1;
hash["key1"] = 2;
console.log(hash["key1"]); // 2
hash["key1"] = 100;
console.log(hash["key1"]); //100
delete hash["key1"];
console.log(hash["key1"]); //undefined
const hash = new Map();
hash.set("key",1);
hash.set("key1",2);
console.log(hash.get("key1")); // 2
const obj = { a:1 };
hash.set(obj,"AAA");
console.log(hash.get(obj)); // AAA
console.log(hash.keys()); // { 'key', 'key1', { a: 1 } }
console.log(hash.values()); // { 1, 2, 'AAA' }
hash.clear();
console.log(hash); //{}
const hash = new Set();
hash.add("key",1);
hash.add("key1",2);
console.log(hash.has("key1")); //true 이 키 값을 가지고 있는지
console.log(hash.has("key2")); //false
hash.delete("key");
console.log(hash.has("key")); //false
console.log(hash.size); // 1
정점(Node)과 정점 사이를 연결하는 간선(Edge)으로 이루어진 비선형 자료구조 Ex) 드라마 - 인물관계도, 지하철 노선도const graph = Array.from(Array(5), () => Array(5).fill(false));
// [
// [ false, false, false, false, false ],
// [ false, false, false, false, false ],
// [ false, false, false, false, false ],
// [ false, false, false, false, false ],
// [ false, false, false, false, false ]
// ]
graph[0][1] = 1;
graph[0][3] = 1;
graph[1][2] = 1;
graph[2][1] = 1;
graph[3][4] = 1;
graph[4][4] = 1;
//[
// [ false, 1, false, 1, false ],
// [ false, false, 1, false, false ],
// [ false, 1, false, false, false ],
// [ false, false, false, false, 1 ],
// [ false, false, false, false, 1 ]
// ]
const graph = Array.from(Array(5), () => []);
graph[0].push(1);
graph[0].push(3);
graph[1].push(1);
graph[1].push(5);
graph[2].push(10);
graph[3].push(11);
graph[3].push(12);
graph[4].push(0);
console.log(graph); // [ [ 1, 3 ], [ 1, 5 ], [ 10 ], [ 11, 12 ], [ 0 ] ]