栈的应用

52 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

判断括号匹配

判断算数表达式中括号是否配对。算数表达式保存在带头结点的单循环链表中,每个结点又两个域: ch 和 link,其中ch域为字符类型

bool check(LinkList L) {
    InitStack(s);
    LNode* p = L->link;
    while (p != L) {//单循环链表
        if (p->ch == '(' || p->ch == '[' || p->ch == '{')
            push(s, p->ch);
        
        else if (p->ch == ')') {
            pop(s, e);
            if (e != '(')
                return false;
        } 
        else if (p->ch == ']') {
            pop(s, e);
            if (e != '[')
                return false;
        } 
        else if (p->ch == '}') {
            pop(s, e);
            if (e != '{')
                return false;
        }
        p = p->link;
    }

    if (!IsEmpty(s))
        return false; //左括号多于右括号,括号不匹配
    else
        return true; //括号匹配
}