vba栈结构应用基础示例

栈有很多用处,比如你要进行了一系列的操作,然后要以相反的顺序取消这些操作。栈也是实现很多经典算法的数据结构。下面,举两个基础的示例,进一步认识栈。

示例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

在代码中,如果是左括号,则入栈。如果是右括号,则与栈顶元素比较。如果相对应,则表明匹配并弹出栈顶元素;如果不对应,则表明括号不匹配。

office办公软件入门基础教程 » vba栈结构应用基础示例

本文链接:【vba栈结构应用基础示例】https://www.officeapi.cn/86994.html

OFFICE,天天学一点,进步多一点

联系我们