C++を使用したスタックの実装方法


  1. 配列を使用したスタックの実装: 以下は、配列を使用してスタックを実装する基本的なコード例です。
#include <iostream>
#define MAX_SIZE 100
class Stack {
private:
    int top;
    int stackArray[MAX_SIZE];
public:
    Stack() {
        top = -1;
    }
    bool isEmpty() {
        return (top == -1);
    }
    bool isFull() {
        return (top == MAX_SIZE - 1);
    }
    void push(int value) {
        if (isFull()) {
            std::cout << "スタックオーバーフローです。" << std::endl;
            return;
        }
        stackArray[++top] = value;
    }
    int pop() {
        if (isEmpty()) {
            std::cout << "スタックは空です。" << std::endl;
            return -1;
        }
        return stackArray[top--];
    }
};
int main() {
    Stack stack;
    stack.push(10);
    stack.push(20);
    stack.push(30);
    std::cout << stack.pop() << std::endl;  // 出力: 30
    std::cout << stack.pop() << std::endl;  // 出力: 20
    std::cout << stack.pop() << std::endl;  // 出力: 10
    return 0;
}
  1. リンクリストを使用したスタックの実装: 以下は、リンクリストを使用してスタックを実装するコード例です。
#include <iostream>
class Node {
public:
    int data;
    Node* next;
    Node(int value) {
        data = value;
        next = nullptr;
    }
};
class Stack {
private:
    Node* top;
public:
    Stack() {
        top = nullptr;
    }
    bool isEmpty() {
        return (top == nullptr);
    }
    void push(int value) {
        Node* newNode = new Node(value);
        newNode->next = top;
        top = newNode;
    }
    int pop() {
        if (isEmpty()) {
            std::cout << "スタックは空です。" << std::endl;
            return -1;
        }
        int poppedValue = top->data;
        Node* temp = top;
        top = top->next;
        delete temp;
        return poppedValue;
    }
};
int main() {
    Stack stack;
    stack.push(10);
    stack.push(20);
    stack.push(30);
    std::cout << stack.pop() << std::endl;  // 出力: 30
    std::cout << stack.pop() << std::endl;  // 出力: 20
    std::cout << stack.pop() << std::endl;  // 出力: 10
    return 0;
}

上記のコード例では、配列とリンクリストを使用してスタックを実装する方法を示しています。スタックの基本的な操作であるpush(要素の追加)とpop(要素の取り出し)が実装されています。また、スタックが空かどうかを確認するisEmpty関数も提供されています。