数据结构课程设计判别括号配对问题的栈实现

武汉理工大学,数据结构课设,判别括号配对——一个算术表达式含圆括号、中括号、花括号,并且它们可以任意嵌套使用。程序要求判断任一算术表达式中括号是否正确配对。

题目要求:

1. 表达式从键盘输入;

2. 使用栈来判断括号配对;

3. 自行设计测试用例。

思路解析:

1. 定义一个栈,遍历表达式中的每个字符;

2. 如果是左括号((、[、{),则入栈;

3. 如果是右括号()、]、}),则判断栈顶元素是否匹配对应的左括号;

4. 如果匹配,弹出栈顶元素;否则,表示括号配对错误;

5. 最后如果栈为空,则表示括号配对正确,否则表示有未匹配的左括号。

示例代码

#include 
#include 
using namespace std;

bool isValid(string expr) {
    stack s;
    for (char c : expr) {
        if (c == '(' || c == '[' || c == '{') {
            s.push(c);
        } else if (c == ')' || c == ']' || c == '}') {
            if (s.empty()) return false;
            char top = s.top();
            s.pop();
            if (c == ')' && top != '(') return false;
            if (c == ']' && top != '[') return false;
            if (c == '}' && top != '{') return false;
        }
    }
    return s.empty();
}

int main() {
    string expr;
    cout << "请输入算术表达式:";
    cin >> expr;
    if (isValid(expr)) {
        cout << "括号配对正确!" << endl>

测试用例:

1. a + (b * [c - {d / e}]) -> 正确配对;

2. a + (b * [c - {d / e]}) -> 错误配对。

该方法通过栈高效地解决了括号配对问题,且能应对复杂的嵌套情况。

doc 文件大小:90.5KB