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

Pocket

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

序文

はい。

夏休みに入り、蒸し暑い日がつづきますね。

今年は、皆さんは、避暑地、海、山、など旅行に行かれる計画はあられますでしょうか?

せっかくの夏休み、有意義に過ごしたいですね。

さて、今回は、プログラム言語特有の用語「データ構造」というモノを取り扱います。

「データ構造」の前半分は皆さんご存じの通り、データや値のことを示します。

後半の「構造」とは、一般的にいう「構造物」「立体物」という意味です。

つまり「データ構造」とは、各種データを立体的な構造物に入れて、管理することを示します。

今回の立体物・構造物の形式は「スタック」といいます。

なお、スタックを使用されるには、「エクセル関数日本語化」ver0.15.01以上が必要です。

下記URLにてダウンロードされてください。


また、ベクターにも、同バージョンを公開申請中です。こちらは今しばらくお待ちください。

まず、「エクセルVBA日本語化」ver0.15.01以上のバージョンを以下のURLの手順に従って、インストールしてください。

インストールが完了したら、以下のURLの手順に従って、VBAn編集画面を開いてください。

スタックにデータをプッシュする

スタックへのデータのプッシュの概念

スタックへデータのプッシュの概念
スタックへデータのプッシュの概念

まず最初に青色のスタックに2個のデータ“a”、“b”が挿入されていることを前提としています。

ここででは、スタックに“c”をプッシュします。

“c”は必ず、スタックの一番上に置かれます。

スタックに“c”をプッシュした
スタックに“c”をプッシュした

その結果、スタックには、”a”,”b”,”c”の3つが、構造的に構築されました。

いまはまだ、このような構造物がなんの役に立つかは分かりませんがそれでかまいません。

しかし、プログラミングの世界では大変メジャーなデータ構図で頻繁に使用されます。

実際のコード

それでは、実際のサンプルコードを見ていきましょう。

まず、スタック変数を「h_変数取得」から取得しています。この際のSetはおまじないとして覚えておいてください。もし間違っていたらコンパイルエラーが指摘してるので心配ありません。

次にスタックに”a”,”b”,”c”をプッシュしています。

最後にスタック内の要素を全て連結して文字列化しています。

[実行結果]

実行結果
実行結果
逆順実行結果
逆順実行結果

以上のように、スタックの各要素を文字列にして連結した値を表示できました。

スタックからデータをポップする

スタックからデータをポップする概念

スタックではデータを削除することもできます。

ただし、削除1件につき、スタックの一番上のデータ一件のみです

スタックの先頭要素”c”がポップされた
スタックの先頭要素”c”がポップされた

ポップすると、スタックの先頭要素”c”がスタックから排除されました。

スタックのポップがなぜこのような動作をとるか、本当に、皆さん疑問かと思います。

実は、スタックはコンピュータ処理と昔から相性が良いのです。

  • 積み上げたスタックデータは一時的な処理に必要で、処理を行った後は余り使わない。
  • 現在積み上げられているスタックに対しリソース(コンピュータの処理能力)が足りるかを判断する。
  • 先にスタックを積んだデータは一番最後に処理され、一番後にスタックを積んだデータは一番最初に処理され得る。この特性を利用するコンピュータアルゴリズムは多い。

実際のコード

では、スタックかポップすると、データがどのようになるか、実際のコードで確認してみましょう。

以下のコードでは、一度スタックに”a”,b”,”c”をポップしてデータを入れ込んでいます。

次に2回、ポップしています。

ポップはスタックの最上部からデータを削除してくため、結果的に”c”,”b”の順にポップされます。

[実行結果]

-*ポップ1回目 *-

実行結果
逆順実行結果実行結果

-*ポップ2回目:*-

実行結果
実行結果

以上のようにポップ1回目ではスタックの先頭の“c”が削除されて残りの”a”,”b”が表示されています。

さらに2回目のポップでは、スタックの先頭となった“b”が削除されて残りの”a”だけが表示されています。

 

まとめ

お疲れ様でした。

ここまで読んで頂きまして、本当にありがとうございました。

特に今回はスタックと言う抽象的で具体的な使いどころがわかりずらいかと思います。

しかし、日本語VBAでは使い方自体は簡単ですので。ぜひ、手になじませてみてください。

  • スタックとは最後にスタックに積んだ物を最初にスタックから取り出す形式(LIFO:LastInFirstOut:LIFO)
  • スタックへプッシュするとデータがスタックの一番上に配置される
  • スタックからポップするとスタックの一番上のデータが削除される。
    なお、このとき、ポップ関数の返値はポップされたデータ

抽象概念って難しいですね。

まずつかいところが分かりづらいですよね。

しかし、知識として知っていると、ん?ここはスタックが使えるんじゃないの?とか浮かんできます。

その後はやっり試行錯誤をし、成功したり、失敗して落ち込むこともアルのですが。

それではー またー (^_^)/

The following two tabs change content below.
KaBA@フリーランス修行中

KaBA@フリーランス修行中

こんにちは!IT業界で勤めて17年くらい務めています。プログラミング大好きやろーです。 自分も独学でC言語を覚えIT会社に就職しました。その後紆余曲折を経て、VB6.0、VBA、Perl、C#、HTML、CSS、JavaScript、PHPなどを覚えていきました。全部C言語の独学時の経験がベースとなって、学習曲線が良いカーブを描いていました。 情報工学科を出ていなくても、独学でエンジニアは育つことができると思います! このブログで皆さんがプログラミングに興味を持たれるのを心待ちにしています! 頑張って覚えられてください!よろしくお願いします。