JavaScriptでのスタックとキューの実装方法


スタックの実装方法:

  1. 配列を使用する方法: JavaScriptの配列は、スタックの実装に適しています。以下は、配列を使用してスタックを実装する例です。
class Stack {
  constructor() {
    this.stackArray = [];
  }
  push(element) {
    this.stackArray.push(element);
  }
  pop() {
    return this.stackArray.pop();
  }
  peek() {
    return this.stackArray[this.stackArray.length - 1];
  }
  isEmpty() {
    return this.stackArray.length === 0;
  }
  size() {
    return this.stackArray.length;
  }
}
// スタックの使用例
const stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
console.log(stack.pop());  // 出力: 3
console.log(stack.peek()); // 出力: 2
console.log(stack.isEmpty()); // 出力: false
console.log(stack.size()); // 出力: 2
  1. 単方向連結リストを使用する方法: スタックを単方向連結リストで実装する方法もあります。以下は、単方向連結リストを使用してスタックを実装する例です。
class Node {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}
class Stack {
  constructor() {
    this.top = null;
    this.size = 0;
  }
  push(element) {
    const newNode = new Node(element);
    newNode.next = this.top;
    this.top = newNode;
    this.size++;
  }
  pop() {
    if (!this.isEmpty()) {
      const poppedNode = this.top;
      this.top = this.top.next;
      this.size--;
      return poppedNode.value;
    }
    return null;
  }
  peek() {
    if (!this.isEmpty()) {
      return this.top.value;
    }
    return null;
  }
  isEmpty() {
    return this.size === 0;
  }
  getSize() {
    return this.size;
  }
}
// スタックの使用例
const stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
console.log(stack.pop());  // 出力: 3
console.log(stack.peek()); // 出力: 2
console.log(stack.isEmpty()); // 出力: false
console.log(stack.getSize()); // 出力: 2

キューの実装方法:

  1. 配列を使用する方法: 配列を使用してキューを実装することもできます。以下は、配列を使用してキューを実装する例です。
class Queue {
  constructor() {
    this.queueArray = [];
  }
  enqueue(element) {
    this.queueArray.push(element);
  }
  dequeue() {
    return this.queueArray.shift();
  }
  peek() {
    return this.queueArray[0];
  }
  isEmpty() {
    return this.queueArray.length === 0;
  }
  size() {
    return this.queueArray.length;
  }
}
// キューの使用例
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
console.log(queue.dequeue()); // 出力: 1
console.log(queue.peek());    // 出力: 2
console.log(queue.isEmpty()); // 出力: false
console.log(queue.size());    // 出力: 2
  1. 単方向連結リストを使用する方法: キューを単方向連結リストで実装する方法もあります。以下は、単方向連結リストを使用してキューを実装する例です。
class Node {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}
class Queue {
  constructor() {
    this.head = null;
    this.tail = null;
    this.size = 0;
  }
  enqueue(element) {
    const newNodeは新しいノードを作成し、キューの末尾に追加します。
    const newNode = new Node(element);
    if (this.isEmpty()) {
      this.head = newNode;
      this.tail = newNode;
    } else {
      this.tail.next = newNode;
      this.tail = newNode;
    }
    this.size++;
  }
  dequeue() {
    if (!this.isEmpty()) {
      const dequeuedNode = this.head;
      this.head = this.head.next;
      if (this.head === null) {
        this.tail = null;
      }
      this.size--;
      return dequeuedNode.value;
    }
    return null;
  }
  peek() {
    if (!this.isEmpty()) {
      return this.head.value;
    }
    return null;
  }
  isEmpty() {
    return this.size === 0;
  }
  getSize() {
    return this.size;
  }
}
// キューの使用例
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
console.log(queue.dequeue()); // 出力: 1
console.log(queue.peek());    // 出力: 2
console.log(queue.isEmpty()); // 出力: false
console.log(queue.getSize()); // 出力: 2

これらのコード例を使用することで、JavaScriptでスタックとキューを実装することができます。これらのデータ構造は、データの一時的な保持や順序付けに役立ちます。