#514 配列を使ったスタックのプロシージャ例 VBA

「スタック」とは、「後入れ先出し」でデータを保管したり取り出したりするデータ構造あるいはデータの保管場所のことです。

たとえば、お皿を1枚ずつ上に積み上げていき(保管)、取り出すときは上から1枚ずつ取る要領と同じです。もし「A」「B」「C」という順番にスタックにデータを入れたとき、取り出す際は「C」「B」「A」という逆の順番、すなわち後入れ先出しでデータが取り出されます。

ここでは、配列を使ってそのようなデータ構造を実現するサンプルプロシージャ(クラス)を紹介します。

プログラム例:
標準モジュールではなくクラスモジュールとして作ってあります。実際に試す際には、”クラスモジュール”を新規作成した上で下記のコードを貼り付け、さらに「stack」という名前でモジュールを保存してください。


Option Compare Database
Option Explicit

Private mStackData() As Variant   'スタックのデータを保管する配列
Private mStackCnt As Long           'スタックのデータ数

Public Sub Push(Value As Variant)
'スタックの最上部にデータを入れる

  '配列のサイズをひとつ増やす
  ReDim Preserve mStackData(mStackCnt)
  '配列の最後にデータを代入
  mStackData(mStackCnt) = Value
  'スタックのデータ数をインクリメント
  mStackCnt = mStackCnt + 1

End Sub

Public Function Pop() As Variant
'スタックの最上部からデータをひとつ取り出してその値を返す

  '配列の最後のデータを返り値に設定
  Pop = mStackData(mStackCnt - 1)
  'スタックのデータ数をデクリメント
  mStackCnt = mStackCnt - 1
  '配列のサイズをひとつ減らす
  ReDim Preserve mStackData(mStackCnt)

End Function


実行例:
上記プログラム例はクラスモジュールなので、これを利用する際は「Dim ●● As New stack 」(”●●”は任意、”stack”はクラスモジュールの保存名)のように宣言した上で、各プロシージャをメソッドとして「.」を付けて呼び出します。

Sub StackTest()

  Dim mystack As New stack

  With mystack
    .Push "A"
    .Push "B"
    .Push "C"
    Debug.Print .Pop
    Debug.Print .Pop
    Debug.Print .Pop

    .Push "A"
    .Push "B"
    Debug.Print .Pop
    .Push "C"
    Debug.Print .Pop
    Debug.Print .Pop

  End With

End Sub


実行結果:
スタックのサンプルの実行結果
| Index | Prev | Next |

この情報は参考になりましたか?、問題は解決しましたか?、もしまだなら......
T'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします
 

Copyright © T'sWare All rights reserved