スタック

ノードで構成されたC++のスタックをステップごとに確認します。

すべてこのブラウザ内でシミュレートされ、サーバーには一切送信されません。

値

新しいノードを作成する

新しいノードを作成する

n_ = 0

スタックは空です

  • 追加直後
  • 取り出し中

ステップ 1 / 47

コード

#include <iostream>
using namespace std;
class Nodo { // ノードはデータと次のノードへのポインタを保持します
private: // プライベート属性:メソッドだけが触れます
int dato;
Nodo* siguiente;
public:
Nodo(int d) : dato(d), siguiente(nullptr) {}
int getDato() const { return dato; }
Nodo* getSiguiente() const { return siguiente; }
void setDato(int d) { dato = d; }
void setSiguiente(Nodo* s) { siguiente = s; }
};
class Pila {
private: // 最後にpushしたノードが先頭(top)です
Nodo* cima_; // 先頭ノード
int n_; // ノード数
public:
Pila() : cima_(nullptr), n_(0) {}
// Destructor (no se anima)
~Pila() {
while (cima_ != nullptr) desapilar();
}
void apilar(int valor) { // 先頭に積む: O(1)
Nodo* nuevo = new Nodo(valor); // ノードを作成
nuevo->setSiguiente(cima_); // 新しいノードが古い先頭を指します
cima_ = nuevo; // cima_ が新しいノードを指すようになります
n_++;
}
void desapilar() { // 先頭を取り出し: O(1)
if (cima_ == nullptr) return; // 空のスタック: 削除するものがありません
Nodo* temp = cima_; // 解放できるよう先頭を保持します
cima_ = cima_->getSiguiente(); // cima_ が下の次のノードに移ります
delete temp; // メモリを解放
n_--;
}
// Muestra la pila de la cima a la base
void imprimir() const {
cout << "cima ->";
for (Nodo* p = cima_; p != nullptr; p = p->getSiguiente())
cout << " " << p->getDato();
cout << endl;
}
};
int main() {
Pila pila;
pila.apilar(3);
pila.apilar(6);
pila.apilar(9);
pila.imprimir(); // cima -> 9 6 3
pila.desapilar();
pila.imprimir(); // cima -> 6 3
pila.apilar(1);
pila.imprimir(); // cima -> 1 6 3
return 0;
}

このスタック可視化ツールは、最後に積んだ要素が最初に取り出されるLIFO構造の仕組みを見せてくれます。スタックはC++のノードと、先頭のノードを指すcima_というポインターで構成されます。ランダムな操作列を生成するか、プッシュとポップを自分で追加できます(合計最大12個)。再生すると、ノードの出入りやn_カウンター、cima_の移動が確認でき、対応するC++コードの行も強調されます。アルゴリズム学習に便利で、処理はブラウザー内で行われます。

使い方

  1. サイズを選んで「シャッフル」を押し、ランダムな操作列を生成します。空の状態から始めることもできます。
  2. プッシュまたはポップを選び、プッシュのときは値を入力して「追加」で操作を加えます。
  3. 「再生」を押すか、前へ・次へのボタンでステップごとに進めます。
  4. n_カウンター、cima_ポインター、追加された直後や取り出される箱の表示を確認します。

よくある質問

LIFOとは何ですか?
Last In, First Out(後入れ先出し)の略で、最後に積んだ要素が最初に出てきます。そのため、操作するのは常にスタックの先頭だけです。
どんな操作がありますか?
値を追加するプッシュと、先頭を取り除くポップです。先頭を見るだけの別の操作はありません。
空のスタックでポップするとどうなりますか?
何も削除されません。アニメーションでスタックが空でないかを確認し、取り除くものがないと知らせます。
コードも表示されますか?
はい。サイズ変更できるC++パネルに、各ステップに対応する行が強調されて表示されます。

関連ツール