使用VBA实现栈结构

时间:2023-11-16 06:47:12 

栈是一种常见的基础数据结构,用来实现后进先出的目的。比如,在桌子上摞了一堆书,最后放的书一定在最上面,最先拿走的也是最上面的书。

栈中的元素只能从栈顶进入,称为入栈,如下图1所示。栈中的元素只能从栈顶删除,称为出栈,如下图2所示。

使用VBA实现栈结构

图1

使用VBA实现栈结构

图2

在一些高级编程语言,例如C中,利用指针可以很容易实现栈结构。其实,在VBA中也很容易实现栈。

如下图3所示,变量siTop指向栈顶,从栈顶开始,每个元素项都指向其下一元素项,直至栈底。

使用VBA实现栈结构

图3

这里,使用了两个类模块:StackItem类模块、Stack类模块。

StackItem类模块

在StackItem类模块中,仅包含两个变量,变量Value用来包含每的元素的值,变量NextItem用来指向其下一元素项。StackItem类模块中的代码为:

‘元素值

Public Value As Variant

‘下一元素

Public NextItem As StackItem

注意到,在StackItem类模块中,变量NextItem声明为该类自身,正是因为这种自引用声明使VBA中可以生成动态的数据结构。

Stack类模块

在Stack类模块中,声明了一个指向栈顶的变量siTop,实现了入栈操作的Push方法、出栈操作的Pop方法、以及两个只读属性StackTop和StackEmpty,其中StackTop属性用来返回栈顶元素的值,StackEmpty属性返回栈是否为空,True表示栈中没有元素项,False表示栈中有元素项。

Stack类模块的代码:

‘栈顶

Dim siTop As StackItem

‘在栈顶添加新元素

Public Sub Push(ByVal varTextAs Variant)

Dim siNewTop As New StackItem

siNewTop.Value = varText

Set siNewTop.NextItem = siTop

Set siTop = siNewTop

End Sub

Public Function Pop() AsVariant

If Not StackEmpty Then

‘从栈顶获取元素值

Pop = siTop.Value

‘接着,设置新栈顶

Set siTop = siTop.NextItem

EndIf

End Function

‘栈是否为空

Property Get StackEmpty() AsBoolean

StackEmpty = (siTop Is Nothing)

End Property

‘栈顶元素值

Property Get StackTop() AsVariant

If StackEmpty Then

StackTop = Null

Else

StackTop = siTop.Value

End If

End Property

广告动手学深度学习 全彩精装版

作者:阿斯顿·张(Aston Zhang) 李沐(Mu Li)[美] 扎卡里·C. 立

当当

测试栈

下面的代码用来测试已实现的栈数据结果。在VBE中插入一个标准模块,在其中输入下面的代码:

Dim stkTest As New Stack

Sub TestStacks()

‘入栈

stkTest.Push “Excel”

stkTest.Push “excelperfect”

stkTest.Push “Excel”

‘出栈并打印元素值

Do While Not stkTest.StackEmpty

Debug.Print stkTest.Pop()

Loop

Debug.Print “————–”

‘入栈

stkTest.Push “测试”

Debug.Print stkTest.StackTop

End Sub

运行代码的结果如下图4所示。

使用VBA实现栈结构

标签:excel图表制作,excel常用函数,excel数据透视表,Excel教程
0
投稿

猜你喜欢

  • XP系统设备管理器空白怎么应对?

    2022-07-25 18:12:14
  • Word2010怎样从某一页开始设置开始页码

    2023-12-06 21:22:42
  • WPS使用邮件合并批量打印成绩单.请柬.工资条

    2023-11-19 12:01:54
  • Word2003教程之一次插入多个图片方法

    2023-02-12 18:48:51
  • Windows11安全中心消失了无法打开怎么办?

    2023-04-29 20:35:25
  • Win10 14385下双击程序会出现卡顿问题的解决方法

    2022-07-27 05:29:57
  • Win10平板模式:又一次彻底的失败

    2022-05-01 06:02:17
  • 从零开始教你打造优秀的扁平化PPT

    2023-07-28 03:49:25
  • PPT制作半圆形色块型目录页实例教程及技巧

    2022-02-09 16:11:15
  • 无线路由器怎么防止陌生人蹭网的设置方法

    2022-06-18 05:00:24
  • 微信如何跟拍表情 微信跟拍表情的方法

    2023-02-19 07:34:19
  • Win11提示无法启动适用于android的windows子系统的解决方法

    2022-08-14 10:02:38
  • Win7中快捷方式图标丢失问题的解决方法(最新)

    2023-09-18 07:14:47
  • C2). 2、回车得到结果21

    2022-05-14 01:55:23
  • WPS 如何展开Excel隐藏列

    2023-11-03 19:20:23
  • word怎么制作水印

    2023-08-25 06:07:59
  • (完美解决)怎么解除谷歌浏览器的防火墙?

    2023-05-02 04:06:16
  • 钉钉怎么设置考勤打卡时间-钉钉设置考勤打卡时间的方法教程

    2022-10-02 12:09:33
  • Win10斯巴达浏览器打开下载保存位置的方法

    2022-05-23 05:48:37
  • 教你Win10切换win7风格桌面 Win10风格改成Win7

    2022-11-03 14:55:40
  • asp之家 电脑教程 m.aspxhome.com