-
JavaScriptでリンクリストから要素を削除する方法
リンクリストから要素を削除する基本の考え方 リンクリスト(連結リスト)から要素を削除する処理は非常にシンプルです。削除したいノードへの参照を失う(参照を切り離す)だけで実現できます。ただし、削除する位置によって処理が異なるため、次の3つのケースを考慮する必要があります。 ケース1:先頭(ヘッド)から削除する場合 先頭の要素を削除する場合は、head = head.next と代入するだけでOKです。これにより最初のノードへの参照が失われ、headは2番目のノードを指すようになります。 ケース2:末尾(テール)から削除する場合 末尾の要素を削除する場合は、最後から2番目のノードの node.ne
-
JavaScriptでリンクリスト(LinkedList)クラスを実装する方法
リンクリスト(連結リスト)は、各要素(ノード)が「データ」と「次のノードへの参照」を持つ線形データ構造です。配列と異なり、要素の挿入や削除を参照の付け替えだけで行えるため、特定の場面では非常に効率的に動作します。ここでは、JavaScriptで実装したLinkedListクラスの完全なコードを紹介し、その後、各メソッドの役割を解説します。LinkedListクラスの実装例class LinkedList { constructor() { this.head = null; this.length = 0; } insert(data, position = thi
-
JavaScriptで学ぶ双方向連結リスト(Doubly Linked List)の基本
双方向連結リストとは双方向連結リスト(Doubly Linked List)は、すべての操作において片方向連結リスト(Singly Linked List)とほぼ同じように動作します。違いは、各ノードが1つ余分にリンクを保持するという点だけです。片方向連結リストでは、ノードは「next」リンクのみを持っていました。一方、双方向連結リストでは、「next」(次のノードへの参照)と「prev」(前のノードへの参照)の2つのリンクを持ちます。構造のイメージ双方向連結リストは、次のように表されます。実装時の注意点クラスとして実装する際には、先頭の要素だけでなく、末尾の要素(tail)も追跡して管理する
-
JavaScriptで双方向リンクリスト(二重リンクリスト)を作成する方法
双方向リンクリスト(二重リンクリスト)とは、各ノードが「次のノード」と「前のノード」の両方への参照を持つデータ構造です。片方向リンクリストでは前方へしかたどれませんが、双方向リンクリストならどちらの方向にも移動できるため、挿入や削除などの操作がより柔軟に行えます。 ここでは、JavaScriptを使って双方向リンクリストを実装する基本的な手順を解説します。 LinkedListクラスとNodeクラスの定義 まず、head(先頭)とtail(末尾)をnullで初期化するコンストラクタを持つシンプルなクラスを定義することから始めましょう。あわせて、LinkedListクラスのプロトタイプ上に、リン
-
JavaScriptで双方向リンクリストの任意の位置に要素を挿入する方法
本記事では、JavaScriptで双方向リンクリスト(ダブリーリンクリスト)の指定した位置にデータを挿入するための insert(data, position) 関数の実装方法を詳しく解説します。挿入処理の基本的な流れ指定位置への挿入は、次の手順で行います。新しいノードを作成するリストが空かどうかを確認する。空の場合は、そのノードを head と tail の両方に設定して処理を終了する空でない場合は、currNode を使って目的の位置までリストを走査する。走査は currNode を currNode.next に置き換えながら進めますリンク(ポインタ)の付け替え目的の位置に到達したら、以
-
JavaScriptでキュー(Queue)の要素をクリアする方法
JavaScriptで自作したキュー(Queue)の要素をすべて削除したい場合は、コンテナとして使っている配列に空の配列を再代入するだけで簡単にクリアできます。以下のようにclear()メソッドを実装しましょう。 clear() { this.container = []; } 実装例 この関数が正しく動作しているかどうかは、次のようなコードで確認できます。 let q = new Queue(2); q.enqueue(3); q.enqueue(4); q.display(); q.clear(); q.display(); 出力結果 上記のコードを実行すると、次のような出力が得ら
-
JavaScriptでキュークラスを実装する方法
キューとはキュー(Queue)は、先入れ先出し(FIFO: First In, First Out)の原則に従うデータ構造です。最初に追加した要素が最初に取り出されるという特性を持つため、タスクの待ち行列や処理の順番管理など、さまざまな場面で活用されています。以下は、JavaScriptで実装したQueueクラスの完全なコードです。Queueクラスの完全な実装class Queue { constructor(maxSize) { // サイズが指定されていない場合はデフォルト値を設定 if (isNaN(maxSize)) { maxSize
-
JavaScriptで学ぶ優先キュー(Priority Queue)の基本と実装
優先キューとは?優先キュー(Priority Queue)は、通常のキュー(待ち行列)やスタックに似た抽象データ型の一つですが、大きな違いとして各要素に「優先度」が関連付けられているという特徴を持っています。通常のキューでは先に入れた要素から順に取り出されます(FIFO:First In, First Out)が、優先キューでは優先度の高い要素が優先度の低い要素よりも先に取り出されるのがルールです。また、複数の要素が同じ優先度を持つ場合には、それらはキューに追加された順序(FIFO)に従って処理されます。優先キューの活用例優先キューは実際の開発でも幅広く利用されています。代表的な例としては以下
-
JavaScriptで優先キュー(プライオリティキュー)を作成する方法
優先キュー(プライオリティキュー)は、通常のキューとは異なり、各要素に優先度が割り当てられたデータ構造です。優先度の高い要素から順に取り出される仕組みのため、タスクスケジューリングやDijkstra法などのグラフ探索アルゴリズム、イベント処理システムなど、幅広い場面で活用されています。この記事では、JavaScriptを使って優先キューの基本クラスを実装する方法を解説します。 優先キュークラスに実装する機能一覧 今回作成するクラスには、以下の関数を実装していきます。 enqueue(element):キューに要素を追加する関数 dequeue():キューから要素を取り出す(削除する)関数 p
-
JavaScriptで優先度付きキュー(PriorityQueue)に要素を追加する方法
優先度付きキュー(PriorityQueue)への要素追加(エンキュー)とは、各要素が持つ優先度に従って、配列内の適切な位置へ要素を挿入することを指します。本記事では、数値が大きいほど優先度が高いというルールを採用します。基本的な考え方はシンプルで、コンテナ内を先頭から順に走査し、「現在の要素より優先度が低い要素」が見つかった時点でその位置に新しい要素を挿入します。該当する位置が見つからなかった場合は、コンテナの末尾に要素を追加します。なお、この実装ではデータ(data)と優先度(priority)を持つ要素オブジェクトを作成しています。そのため、enqueue関数は次のように実装できます。実
-
JavaScriptでPriorityQueueから要素を取り出す方法(dequeue関数の実装)
優先度付きキュー(Priority Queue)から要素を取り出す(デキューする)ということは、最も優先度の高い要素を削除することを意味します。 この実装では、最も優先度の高い要素を配列の末尾に格納しています。そのため、JavaScriptのpop()メソッドを使えば、末尾の要素を簡単に取り出すことができます。 つまり、dequeue関数は次のように実装できます。 Example dequeue() { // キューが空かどうかをチェック if (this.isEmpty()) { console.log(Queue Underflow!); r
-
JavaScriptでプライオリティキュー(PriorityQueue)の要素をピークする方法
PriorityQueueのpeek(ピーク)とはプライオリティキュー(PriorityQueue)における「ピーク(peek)」とは、キュー内で最も優先度の高い値を、要素を取り除くことなく参照する操作のことです。dequeueのように要素を削除しないため、キューの状態を変えずに中身を確認したい場合に便利です。それでは、peek関数を次のように実装してみましょう。実装例peek() { if (isEmpty()) { console.log(Queue Underflow!); return; } return this.contain
-
JavaScriptでPriorityQueue(優先度付きキュー)の要素をクリアする方法
PriorityQueueの内容をクリアする最もシンプルな方法は、コンテナとして使っている配列に空の配列を再代入することです。これにより、キュー内のすべての要素が一括で削除されます。clear()メソッドの実装以下のように、clear()メソッドをクラスに追加するだけで実装できます。clear() { this.container = []; }動作確認の例実際にこの関数が正しく動作しているか、以下のコードで確認してみましょう。let q = new PriorityQueue(4); q.enqueue(Hello, 3); q.enqueue(World, 2); q.enqueu
-
JavaScriptで実装するPriorityQueue(優先度付きキュー)クラスの完全ガイド
優先度付きキュー(Priority Queue)は、通常のFIFO(先入れ先出し)キューとは異なり、各要素が持つ「優先度」に基づいて処理順序が決まるデータ構造です。優先度の高い要素から順に取り出されるため、タスクスケジューリング、ダイクストラ法などのアルゴリズム、イベント処理システムなどで広く活用されています。ここでは、JavaScriptによるPriorityQueueクラスの完全な実装例を紹介します。 PriorityQueueクラスの完全な実装 以下がPriorityQueueクラスの完全な実装コードです。要素は内部で常に優先度順にソートされた状態で保持されます。 class Prior
-
JavaScriptで学ぶリンクリスト(連結リスト)データ構造の基礎
リンクリスト(連結リスト)とはリンクリスト(連結リスト)とは、複数のデータ構造が「リンク」によって順番に連結された、一連のデータの並びのことです。各リンク(要素)はデータそのものを保持すると同時に、次の要素への参照を持っています。リンクリストは、配列と並んで最もよく使われるデータ構造の一つです。配列と異なり、要素の追加や削除を柔軟に行えるという特徴があります。ここで、リンクリストを理解するうえで欠かせない基本的な用語を確認しておきましょう。リンクリストを構成する基本用語ノード(Node)ノードとは、リンクリストを構成する各要素のことです。ノードは「データ(data)」と「次(next)」という
-
JavaScriptでスタックに要素をプッシュ(Push)する方法
ここでは、いくつかの小さなヘルパー関数を備えた、次のようなJavaScriptのスタッククラスを考えてみましょう。例class Stack { constructor(maxSize) { // 最大サイズが指定されない場合はデフォルト値を設定 if (isNaN(maxSize)) { maxSize = 1
-
JavaScriptでスタックから要素をポップ(POP)する方法
JavaScriptでシンプルなスタッククラスを考えてみましょう。スタックは「後入れ先出し(LIFO:Last In, First Out)」と呼ばれるデータ構造で、最後に追加した要素が最初に取り出されるという特徴があります。 例 class Stack { constructor(maxSize) { // maxSizeが指定されていない場合はデフォルト値を設定 if (isNaN(maxSize)) { maxSize = 10; } this.maxSize = maxSize; // ス
-
JavaScriptのスタックから要素を覗き見る:peek操作の実装方法
JavaScriptにおけるシンプルなスタッククラスまず、JavaScriptでシンプルなスタッククラスを考えてみましょう。スタックは「後入れ先出し(LIFO:Last In First Out)」と呼ばれるデータ構造で、最後に追加した要素が最初に取り出されるという特徴があります。実装例= this.maxSize; } push(element) { // スタックが満杯かどうかを確認 if (this.isFull()) { console.log(Stack Overflow!); retu
-
JavaScriptでスタックの要素をクリアする方法
JavaScriptでシンプルなスタッククラスを考えてみましょう。スタックは「後入れ先出し(LIFO: Last In, First Out)」という特性を持つ基本的なデータ構造で、最後に追加された要素が最初に取り出されます。スタッククラスの基本実装= this.maxSize; } push(element) { // スタックが満杯かどうか確認 if (this.isFull()) { console.log(Stack Overflow!); return; }
-
JavaScriptでスタッククラスを実装する方法【完全なコード例つき】
スタック(Stack)は、「後入れ先出し(LIFO: Last In, First Out)」と呼ばれる基本的なデータ構造の一つです。最後に追加した要素が最初に取り出されるという特性を持つため、ブラウザの履歴管理や元に戻す(Undo)機能など、さまざまな場面で活用されています。この記事では、JavaScriptでスタッククラスを実装する方法を、完全なサンプルコードとともにわかりやすく解説します。スタッククラスの完全な実装以下は、JavaScriptで記述したスタッククラスの完全な実装例です。class Stack { constructor(ma