「スタック」機能を追加しました – スタックの解説と使い方

目次
序文
はい。
夏休みに入り、蒸し暑い日がつづきますね。
今年は、皆さんは、避暑地、海、山、など旅行に行かれる計画はあられますでしょうか?
せっかくの夏休み、有意義に過ごしたいですね。
さて、今回は、プログラム言語特有の用語「データ構造」というモノを取り扱います。
「データ構造」の前半分は皆さんご存じの通り、データや値のことを示します。
後半の「構造」とは、一般的にいう「構造物」「立体物」という意味です。
つまり「データ構造」とは、各種データを立体的な構造物に入れて、管理することを示します。
今回の立体物・構造物の形式は「スタック」といいます。
なお、スタックを使用されるには、「エクセル関数日本語化」ver0.15.01以上が必要です。
下記URLにてダウンロードされてください。
また、ベクターにも、同バージョンを公開申請中です。こちらは今しばらくお待ちください。
まず、「エクセルVBA日本語化」ver0.15.01以上のバージョンを以下のURLの手順に従って、インストールしてください。
インストールが完了したら、以下のURLの手順に従って、VBAn編集画面を開いてください。
スタックにデータをプッシュする
スタックへのデータのプッシュの概念

まず最初に青色のスタックに2個のデータ“a”、“b”が挿入されていることを前提としています。
ここででは、スタックに“c”をプッシュします。
“c”は必ず、スタックの一番上に置かれます。

その結果、スタックには、”a”,”b”,”c”の3つが、構造的に構築されました。
いまはまだ、このような構造物がなんの役に立つかは分かりませんがそれでかまいません。
しかし、プログラミングの世界では大変メジャーなデータ構図で頻繁に使用されます。
実際のコード
それでは、実際のサンプルコードを見ていきましょう。
まず、スタック変数を「h_変数取得」から取得しています。この際のSetはおまじないとして覚えておいてください。もし間違っていたらコンパイルエラーが指摘してるので心配ありません。
次にスタックに”a”,”b”,”c”をプッシュしています。
最後にスタック内の要素を全て連結して文字列化しています。
Public Sub スタックテスト01() Dim w_スタック As スタック Set w_スタック = h_変数取得.スタック w_スタック.プッシュ "a" w_スタック.プッシュ "b" w_スタック.プッシュ "c" g_道具.表示 w_スタック.文字列化(なし) g_道具.表示 w_スタック.逆順文字列化(なし) Set w_スタック = Nothing End Sub
[実行結果]


以上のように、スタックの各要素を文字列にして連結した値を表示できました。
スタックからデータをポップする
スタックからデータをポップする概念
スタックではデータを削除することもできます。
ただし、削除1件につき、スタックの一番上のデータ一件のみです

ポップすると、スタックの先頭要素”c”がスタックから排除されました。
スタックのポップがなぜこのような動作をとるか、本当に、皆さん疑問かと思います。
実は、スタックはコンピュータ処理と昔から相性が良いのです。
- 積み上げたスタックデータは一時的な処理に必要で、処理を行った後は余り使わない。
- 現在積み上げられているスタックに対しリソース(コンピュータの処理能力)が足りるかを判断する。
- 先にスタックを積んだデータは一番最後に処理され、一番後にスタックを積んだデータは一番最初に処理され得る。この特性を利用するコンピュータアルゴリズムは多い。
実際のコード
では、スタックかポップすると、データがどのようになるか、実際のコードで確認してみましょう。
以下のコードでは、一度スタックに”a”,b”,”c”をポップしてデータを入れ込んでいます。
次に2回、ポップしています。
ポップはスタックの最上部からデータを削除してくため、結果的に”c”,”b”の順にポップされます。
Public Sub スタックテスト06() Dim w_スタック As スタック Set w_スタック = h_変数取得.スタック w_スタック.プッシュ "a" w_スタック.プッシュ "b" w_スタック.プッシュ "c" w_スタック.ポップ g_道具.表示 w_スタック.文字列化 w_スタック.ポップ g_道具.表示 w_スタック.文字列化 Set w_スタック = Nothing End Sub
[実行結果]
-*ポップ1回目 *-

-*ポップ2回目:*-

以上のようにポップ1回目ではスタックの先頭の“c”が削除されて残りの”a”,”b”が表示されています。
さらに2回目のポップでは、スタックの先頭となった“b”が削除されて残りの”a”だけが表示されています。
まとめ
お疲れ様でした。
ここまで読んで頂きまして、本当にありがとうございました。
特に今回はスタックと言う抽象的で具体的な使いどころがわかりずらいかと思います。
しかし、日本語VBAでは使い方自体は簡単ですので。ぜひ、手になじませてみてください。
- スタックとは最後にスタックに積んだ物を最初にスタックから取り出す形式(LIFO:LastInFirstOut:LIFO)
- スタックへプッシュするとデータがスタックの一番上に配置される
- スタックからポップするとスタックの一番上のデータが削除される。
なお、このとき、ポップ関数の返値はポップされたデータ。
抽象概念って難しいですね。
まずつかいところが分かりづらいですよね。
しかし、知識として知っていると、ん?ここはスタックが使えるんじゃないの?とか浮かんできます。
その後はやっり試行錯誤をし、成功したり、失敗して落ち込むこともアルのですが。
それではー またー (^_^)/

KaBA@フリーランス修行中

最新記事 by KaBA@フリーランス修行中 (全て見る)
- 日本語関数で 今の日時や今日の日付を 求めて表示しよう - 2019年2月2日
- 日本語VBAでセルの 背景色の光の三原色の 成分を求めてみよう - 2019年1月14日
- 「エクセルVBA日本語化」 ver 0.16.0がベクターで 公開されました - 2018年9月12日
- ハッシュを使って 辞書を作ろう JSONも使おう - 2018年9月9日