• 큐를연결리스트로구현하면,삽입과삭제에있어서𝑂 1 을보장할수있다.
• 연결 리스트로 구현할 때는 머리(head)와 꼬리(tail) 두 개의 포인터를 가진다.
• 머리(head): 남아있는 원소 중 가장 먼저 들어 온 데이터를 가리키는 포인터
• 꼬리(tail): 남아있는 원소 중 가장 마지막에 들어 온 데이터를 가리키는 포인터
• 다수의데이터를삽입및삭제할때에대하여,수행시간을측정할수있다.
• 단순히 배열 자료형을 이용할 때보다 연결 리스트를 사용할 때 수행 시간 관점에서 효율적이다.
• JavaScript에서는 Dictionary 자료형을 이용하여 큐(queue)를 구현하면 간단하다.
class Queue {
constructor() {
this.items = {};
this.headIndex = 0;
this.tailIndex = 0;
}
enqueue(item) {
this.items[this.tailIndex] = item;
this.tailIndex++;
}
dequeue() {
const item = this.items[this.headIndex]; delete this.items[this.headIndex]; this.headIndex++;
return item;
}
peek() {
return this.items[this.headIndex]; }
getLength() {
return this.tailIndex - this.headIndex;
} }
// 구현된 큐(Queue) 라이브러리 사용
queue = new Queue();
// 삽입(5) - 삽입(2) - 삽입(3) - 삽입(7) // - 삭제() - 삽입(1) - 삽입(4) - 삭제() queue.enqueue(5);
queue.enqueue(2); // [실행 결과]
queue.enqueue(3); // 3
queue.enqueue(7); // 7
queue.dequeue(); // 1
queue.enqueue(1); // 4
queue.enqueue(4);
queue.dequeue();
// 먼저 들어온 순서대로 출력
while (queue.getLength() != 0) {
console.log(queue.dequeue());
}
큐(Queue)를 구현하고 사용할때 큐에서 데이터를 빼내는 deQueue()함수를 쓰게되면 맨 앞에있던 값이 빠져나가게 되는데 이때 front가 한칸씩 뒤로 밀려나게 되면서 큐의 가용범위가 줄어들면서, 큐의 재사용 또한 불가능하게 됩니다.
만약에, 억지로 큐의 재사용을 하기위해서 front를 출력하고 front뒤의 인덱스를 하나씩 앞당긴다고 하더라도 불필요한 연산이 너무 많아집니다.
데이터가 입력된 시간 순서대로 처리해야 할 필요가 있는 상황에 이용한다.
#include <iostream>
#include <queue>
using namespace std;
int main(void) {
queue<int> q; // 정수형 데이터 값이 당기기
q.push(7); // 값으로 7을 넣고
q.push(5);
q.push(4);
q.pop(); // 남아있는 값 중에 가장 먼저들어온 값 뻬내기
q.push(6);
q.pop();
while (!q.empty()) { // 남아있는 데이터 하나씨 출력할 수 있도록 하기
cout << q.front() << ' '; // 현재 큐에 가장 앞에 있는 값 출력
q.pop(); // q 에 데이터를 빼놓기
}
return 0; // 4 6 출력
}