文章

2

粉丝

31

获赞

0

访问

556

头像
括号匹配的问题 题解:
P4933
发布于2024年3月21日 18:56
阅读数 330

思路:括号匹配→栈

利用栈的先入后出,当访问到左括号`(`和`[`时,就入栈。当访问到右括号时,取栈顶元素,判断栈顶元素是否与左括号匹配,如果匹配,则继续进行字符的判断。

 

注意

① 本解法仅阐述原理,有更优解法(如C++自带栈)
② 在访问右括号时,可以先进性栈是否为空的判断,如果有右括号而栈空,则也可以判定为不匹配。

 

输入示例:(几个容易错的示例)

)[]()

(1+2+3)/1

(

 

代码:

方法一:自建栈

#include <stdio.h>
#include <iostream>
#include <malloc.h>
#include <string.h>
using namespace std;
#define MAXSIZE 100

typedef struct SqStack {
    char* base;
    int top;
};

void InitStack(SqStack& S) {
    S.base = (char*)malloc(MAXSIZE * sizeof(char));
    S.top = 0;
}

bool IsEmpty(SqStack S) {
    if (S.top == 0) return true;
    else return false;
}

int Push(SqStack& S, char e) {
    if (S.top == MAXSIZE) return 0;// 栈满
    else {
        S.base[S.top++] = e;
    }
    ...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发