본문 바로가기

자료구조&알고리즘/자료구조

01. 큐(Queue)

1. 큐 구조

- 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조

- FIFO (First-In, First-Out) 또는 LILO (Last-In, Last-Out)

Enqueue 큐에서 데이터를 넣는 기능
Dequeue 큐에서 데이터를 꺼내는 기능

2. 큐 클래스 생성

class Queue {

    constructor() {
        this.count = 0;
        this.lowestCount = 0;
        this.items = {};
    }

    // 1. queue의 맨 뒤에 데이터를 넣는 method
    enqueue (element) {
        this.items[this.count] = element;
        this.count++;
    }

    // 2. queue에서 맨 앞의 데이터를 삭제하는 method
    dequeue() {
        
        if (this.isEmpty()) {
            return undefined;
        }
        
        const result = this.items[this.lowestCount];
        delete this.items[this.lowestCount];
        this.lowestCount++;

        return result;
    }

    // 3. If we would like to know what the last element added to our queue was, we can use the peek method
    peek() {
        
        if (this.isEmpty()) {
            return undefined;
        }

        return this.items[this.lowestCount];

    }

    // 4. queue에 element가 존재하는지 확인하는 method
    isEmpty() {
        return this.size() === 0;
    }

    // 5. queue의 길이를 확인하는 method
    size() {
        return this.count - this.lowestCount;
    }

    // 6. queue를 비우는 함수
    clear() {
        this.items = {};
        this.count = 0;
        this.lowestCount = 0;
    }

    toString() {

        if (this.isEmpty()) {
            return '';
        }

        let objString = `${this.items[this.lowestCount]}`;
        for (let i = this.lowestCount + 1; i < this.count; i++) {
            objString = `${objString},${this.items[i]}`;
        }
        return objString;

    }

}

output

// using the queue class
const queue = new Queue();
console.log(queue.isEmpty());   //true

queue.enqueue('John');
queue.enqueue('Jake');
queue.enqueue('yk');
console.log(queue.toString());  // John,Jake,yk

console.log(queue.size());  // 3
console.log(queue.isEmpty());   // false

queue.dequeue();    // remove John
queue.dequeue();    // remove Jake
console.log(queue.toString());  // yk

 

소스참고: Learning JavaScript Data Structures and Algorithms

반응형