0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【TypeScriptで学ぶデータ構造】キュー

Posted at

キュー

最初に入れたデータを最初に取り出すデータ構造の一種。

具体的な例としてはプリンターのジョブ管理

プリンターは、印刷の工程をキューで管理しています。複数のユーザーからの印刷要求があった場合、先に送られたものが最初に印刷されます。新しい印刷の要求はキューの中の末尾に追加され、プリンターはキューの先頭にある要求から処理していきます。

また実生活であれば、お店の行列もキューに相当します。(キューのことを待ち行列と言ったりもするそうです。)

キューを再現したQueueクラス

enqueueメソッドで配列itemsに要素を追加します。
追加した要素を取り出す際はdequeueメソッドを使い、最初に入れたものから取り出せるようにしています。

Queue.ts
class Queue<T> {
	private items: T[] = [];
	private front: number = 0; //キューの先頭を管理
	private rear: number = 0; //キューの末尾を管理

	//要素をキューに追加するメソッド
	enqueue(item: T): void {
		this.items[this.rear] = item;
		this.rear += 1;
	}

	//キューの先頭の要素を削除して返すメソッド
	dequeue(): T | undefined {
		if (this.isEmpty()) {
			return undefined;
		}
		const dequeuedItem = this.items[this.front];
		this.front += 1;
		return dequeuedItem;
	}

	//キューが空かどうかを確認するメソッド
	isEmpty(): boolean {
		return this.front === this.rear;
	}

	//キューの内容を表示
	printQueue(): void {
		console.log(this.items.slice(this.front, this.rear).join(" "));
	}
}

//使用例です
const queue = new Queue<number>();
//キューに1000を追加
queue.enqueue(1000);
queue.enqueue(5000);
queue.enqueue(10000);

//この時点では1000 5000 10000
queue.printQueue();

//取り出す処理。下記の場合、1000が取り出される
queue.dequeue();
//次に5000が取り出される
queue.dequeue();
//残ったのは10000!
queue.printQueue();
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?