vba栈结构应用基础示例
发布时间:2022-03-07 00:03:06
栈有很多用处,比如你要进行了一系列的操作,然后要以相反的顺序取消这些操作。栈也是实现很多经典算法的数据结构。下面,举两个基础的示例,进一步认识栈。
示例1:将十进制数转换成二进制
下面的代码将十进制数转换成相应的二进制数:
Dim stkTest As New Stack
‘数制转换代码
Sub convert()
‘要转换成的进制数
Dim n As Integer
‘要转换的十进制数
Dim numValue As Long
‘存放转换中的数
Dim num As Long
‘存放转换后的数
Dim str
‘将n修改为想要转换成的进制
‘将numValue修改为想要转换的数
n = 2
numValue = 1348
num = numValue
‘将转换后的数压入栈
Do Until (num = 0)
stkTest.Push (num – (num \ n) * n)
num = num \ n
Loop
‘逐个数出栈,组合成转换后的结果
Do While (Not stkTest.StackEmpty)
str = str & stkTest.Pop
Loop
MsgBox numValue & “转换为” & n & “进制之后的数为:” & str
End Sub
代码运行后的结果如下图1所示。
图1
可以将代码中的变量n修改为想要转换的进制,例如n=2,表示将数转换成二进制。如果n=8,那么将数转换成八进制。代码中的变量numValue是要转换的十进制数,你可以修改为任意的十进制数。
示例2:判断括号是否匹配
有时候,我们需要判断表达式中的括号是否匹配,例如,由于输入疏忽,漏掉了相应的右括号。可以使用下面的程序来判断括号是否匹配。为了演示方便,直接使用一个包括符号和数字的数组var来测试括号匹配程序。
Dim testStack As New Stack
Sub MatchBracket()
Dim var As Variant
Dim bln As Boolean
bln = True
var = Array(“{“, “[“,”9”, “(“, “)”, “+”, “]”,”}”)
Dim i As Long
For i = LBound(var) To UBound(var)
Select Case var(i)
Case “{“, “[“,”(”
testStack.Push var(i)
Case “)”
If testStack.StackTop =”(” Then
testStack.Pop
Else
bln = False
End If
Case “]”
If testStack.StackTop =”[” Then
testStack.Pop
Else
bln = False
End If
Case “}”
If testStack.StackTop =”{” Then
testStack.Pop
Else
bln = False
End If
End Select
Next i
If bln Then
MsgBox “表达式中的括号是匹配的”
Else
MsgBox “表达式中的括号不匹配”
End If
End Sub
在代码中,如果是左括号,则入栈。如果是右括号,则与栈顶元素比较。如果相对应,则表明匹配并弹出栈顶元素;如果不对应,则表明括号不匹配。


猜你喜欢
- Word2010文档用Insert键切换插入和改写模式.在Word2010文档窗口中,用户不仅可以在“Word选项”对话框状态栏选择“插入”
- mac系统怎么删除Launchpad中的应用图标?Launchpad中有很多程序的图标,当中有很多不用的图标,该怎么删除呢?下面我们就来看看
- 让投影Word文档看得更多默认情况下,Word文档窗口由于功能区、页眉和页脚、页边距等区域的存在,在将Word文档通过投影仪放映到屏幕上时,
- 最近有Win10系统用户反映,电脑经常出现不能关机的情况,关机的时候会一直卡在关机画面一动不动,这让用户非常烦恼。那么,Win10系统不能关
- Pages文稿是Mac系统内置的一款文字处理工具。Pages文稿功能强大,可以进行简单的图片编辑可大大提高工作效率,下面分享Pages文稿如
- 在Excel中输入千分号的方法非常多,例如下面的一些方法: 方法一:用输入法 &n
- hphupd04.exe是HP Photosmart软件升级程序进程文件: hphupd04 or hphupd04.exe 进程名称: H
- 咱们在 操纵WPS表格与Excel表格 停止 一样平常办公时, 常常 需求给 单位格 配置 林林总总的 讲明, 咱们 凡是会在 东西栏 傍边
- 轻推怎么进入帮助中心?轻推是一款团队沟通交流软件,在轻推中如果我们想要进入帮助中心的话,要怎么进行操作呢?下面就给大家分享轻推进入帮助中心的
- 无论是家用电脑还是办公电脑,一般都没有单一的输入法。有些人每次使用时都必须使用鼠标单击,其实真的很麻烦。Windows10系统切换输入法与以
- 在Excel中经常需要用到缩放打印进行对数据的打印,具体该怎么缩放打印呢?接下来是小编为大家带来的excel缩放打印的教程,供大家参考。ex
- WPS表单可用于数据计算、分析和整理。当使用一些复杂的公式时,许多人习惯于寻找现成的公式来使用,甚至制作模板来重复使用。例如,计算个人所得税
- Win10怎么设置自动更换桌面背景?Windows操作系统中大家或许都非常熟悉了,但是win10和之前的系统稍微不同,下面分享Win10壁纸
- 不知道屏幕前的你们有没有遇到过任务管理器打不开的情况,经过小编查找资料发现是由于被系统管理员禁用导致,遇到这种情况怎么办呢?针对这一问题,小
- Windows内存诊断是怎么?电脑发生蓝屏故障,截图的提示中有个内存诊断的措施,很多人不知道如何使用。一般分为两种方法,可以在图形界面操作,
- 有了 Yoink,你的 Mac 里就好像多了一个顺手的置物架。你可以随时用它寄存文件、文件夹、图片、文档、网址与文本片段,让桌面保持清爽整洁
- 如何在excel工作表的每行下面增加1个空行呢?实现的方法有两种,第一是通过可视化界面菜单操作,第二是通过VBA代码操作实现空行的添加。在e
- Win10免费升级很快就要结束了!Windows 10免费升级项目将在7月29日正式结束,而年度更新放在了8月2日,不过因为时差的关系,中国
- Win8如何取消定时关机?其实取消Win8系统定时关机任务的方法很简单,下面小编就给大家带来Win8关闭定时关机任务的方法,一起来看看吧Wi
- 编辑Word文档或添加页面时偶尔会多添加一个,面对这种情况该怎么解决呢?怎样才能把多添加的页面整页删除呢?鉴于新手朋友们比较多,小编在这里制