前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基础扩展 | 14. 栈结构应用基础示例

基础扩展 | 14. 栈结构应用基础示例

作者头像
fanjy
发布2019-07-19 15:51:37
3570
发布2019-07-19 15:51:37
举报
文章被收录于专栏:完美Excel完美Excel

学习Excel技术,关注微信公众号:

excelperfect

在上一篇文章《基础扩展 | 13. 使用VBA实现栈结构》中,我们使用很简洁的VBA代码就实现了栈数据结构。我们知道,栈以有序的方式来控制数据的输入和输出,新元素只能加到栈顶,也只能取走栈顶元素,这样实现了后进先出的数据结构。

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

注意,示例中用到的实现栈结构的基础代码见《基础扩展 | 13. 使用VBA实现栈结构》。

示例1:将十进制数转换成二进制

下面的代码将十进制数转换成相应的二进制数:

代码语言:javascript
复制
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来测试括号匹配程序。

代码语言:javascript
复制
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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档