本文共 1200 字,大约阅读时间需要 4 分钟。
在编程中,判断括号是否匹配是一个常见的问题。给定一个简单的算术表达式,其中包含运算符“+”、“-”、“*”、“/”以及括号“(”和“)”,我们需要通过栈数据结构来判断括号是否正确匹配。
栈是一种先进后出(Last-In-First-Out,LIFO)的数据结构。我们可以利用栈来跟踪括号的匹配情况:
通过上述步骤,我们可以逐步检查整个表达式的括号是否匹配。
void parenthsis(char expr[], int n) { int i; Stack s = StackInit(); // 初始化栈 for (i = 0; i < n; i++) { if (expr[i] == '(') { Push(s, expr[i]); } else if (expr[i] == ')') { if (!StackEmpty(s)) { Pop(s); } else { // 栈为空,说明右括号没有对应的左括号 // 例如,表达式为)123+(,则此处右括号不匹配 // 可以记录错误信息,或者直接返回错误标志 } } } // 检查栈是否为空 if (!StackEmpty(s)) { // 栈中存在未匹配的左括号 // 例如,表达式:(((),则栈中存在未匹配的( } else { // 所有括号都匹配成功 }}
通过上述栈算法,我们可以高效地判断给定的算术表达式中的括号是否匹配。这种方法不仅简单易懂,而且时间复杂度为O(n),能够在线性时间内完成检查任务。
转载地址:http://qzvsz.baihongyu.com/