栈的应用(Boolan)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈的应用(Boolan)相关的知识,希望对你有一定的参考价值。

  对源代码的语法检查是代码编译中的一个基础步骤,在语法分析阶段编译器会检查语法是否符合语言的规则。而在这个过程中对表达式括号匹配是一个必须的环节,例如“[()]"是合法的,"[(])"是非法的,对于括号的匹配问题通常有两种做法,一种是递归求解,另一种是通过栈结构迭代实现。下面主要讲解利用栈的实现。

  使用栈的主要实现算法为:

做一个空栈。读入字符直到文件尾。如果字符是一个开放符号,则将其推入栈中,如果字符是一个封闭符号,则当栈空时报错。否则将栈元素弹出,如果弹出的符号不是对应的开放符号,则报错。在文件尾,如果栈非空则报错。

  下面是代码实例:

  

#include <iostream>
#include <stack>
#include <iomanip>

using namespace std;

bool validToken(char *token) {
    char *p = token;
    stack<char> stk;
    while (*p) {
        switch (*p) {
            case (:
            case [:
            case {:
                stk.push(*p);
                break;
            case ): {
                if (stk.empty() || stk.top() != ()
                    return false;
                stk.pop();
                break;
            }
            case ]: {
                if (stk.empty() || stk.top() != [)
                    return false;
                stk.pop();
                break;
            }
            case }: {
                if (stk.empty() || stk.top() != {)
                    return false;
                stk.pop();
                break;
            }
            default:
                break;
        }
        p++;
    }
    return stk.empty();
}

int main() {
    cout << boolalpha << validToken("{{[[]}") << endl;
    cout << boolalpha << validToken("{} {{{}}}") << endl;
    cout << boolalpha << validToken("()(({{[]}}))") << endl;
    cout << boolalpha << validToken("((([]])))") << endl;

    return 0;
}

 

以上是关于栈的应用(Boolan)的主要内容,如果未能解决你的问题,请参考以下文章

Boolan Homework——Date类

Boolan STL与泛型编程第三周笔记

Boolan STL与泛型编程第一周笔记

网易微专业大数据工程师

Android Studio - 带回栈的导航抽屉

栈的顺序存储结构及应用(CJava代码)