判断括号是否匹配的算法_括号匹配问题 栈c++语言

判断括号是否匹配的算法_括号匹配问题 栈c++语言括号匹配的检验 数据结构【C语言】以下是一个简单的C语言代码,用于检验括号匹配:“`#include <stdio.h>#include <stdlib.h>#define MAX_SIZE 1000typedef str

括号匹配的检验 数据结构【C语言】   以下是一个简单的C语言代码,用于检验括号匹配: “` #include <stdio.h> #include <stdlib.h> #define MAX_SIZE 1000 typedef struct { char data[MAX_SIZE]; int top; } Stack; void init(Stack *s) { s->top = -1; } void push(Stack *s, char c) { if (s->top == MAX_SIZE – 1) { printf(“Error: stack overflow!   ”); exit(1); } else { s->data[++(s->top)] = c; } } char pop(Stack *s) { if (s->top == -1) { printf(“Error: stack underflow!   ”); exit(1); } else { return s->data[(s->top)–]; } } int is_empty(Stack *s) { return (s->top == -1); } char peek(Stack *s) { if (s->top == -1) { printf(“Error: stack underflow!   ”); exit(1); } else { return s->data[s->top]; } } int is_matching_pair(char left, char right) { if (left == ‘(‘ && right == ‘)’) { return 1; } else if (left == ‘{‘ && right == ‘}’) { return 1; } else if (left == ‘[‘ && right == ‘]’) { return 1; } else { return 0; } } int check_matching_parenthesis(char *exp) { Stack s; init(&s); for (int i = 0; exp[i] != ‘0’; i++) { if (exp[i] == ‘(‘ || exp[i] == ‘{‘ || exp[i] == ‘[‘) { push(&s, exp[i]); } else if (exp[i] == ‘)’ || exp[i] == ‘}’ || exp[i] == ‘]’) { if (is_empty(&s) || !is_matching_pair(peek(&s), exp[i])) { return 0; } else { pop(&s); } } } return (is_empty(&s) ? 1 : 0); } int main() { char exp[MAX_SIZE]; printf(“Enter an expression: “); scanf(“%s”, exp); if (check_matching_parenthesis(exp)) { printf(“Expression is balanced.   ”); } else { printf(“Expression is not balanced.   ”); } return 0; } “` 该代码使用一个栈来存储左括号。当遇到左括号时,将其推入栈中。当遇到右括号时,检查栈是否为空,并且检查右括号是否与栈顶素的左括号匹配。如果匹配,则将栈顶素弹出,继续处理下一个字符。如果不匹配,则表达式不平衡。最后,如果栈为空,则表达式平衡,否则表达式不平衡。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/47174.html

(0)
上一篇 2024年 9月 4日
下一篇 2024年 9月 4日

相关推荐

关注微信