设计c语言算法判断一个算术表达式的圆括号是否正确配对
时间: 2023-11-20 17:06:04 浏览: 114
你好,我可以回答您的问题。设计c语言算法判断一个算术表达式的圆括号是否正确配对的方法如下:
1. 定义一个栈,用来存储左括号;
2. 遍历算术表达式中的每个字符,如果是左括号 '(',则将其入栈;
3. 如果是右括号 ')',则将栈中最后一个左括号出栈;
4. 如果栈空或最后一个括号不是配对的左括号,则算法结束,返回“不正确”;
5. 如果遍历完所有字符后,栈非空,则返回“不正确”,否则返回“正确”。
代码实现如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXSIZE 100
typedef char ElemType;
typedef struct {
ElemType data[MAXSIZE];
int top;
} Stack;
void InitStack(Stack *S) {
S->top = -1;
}
bool Push(Stack *S, ElemType x) {
if (S->top == MAXSIZE - 1) {
return false;
}
S->data[++(S->top)] = x;
return true;
}
bool Pop(Stack *S, ElemType *x) {
if (S->top == -1) {
return false;
}
*x = S->data[(S->top)--];
return true;
}
bool GetTop(Stack *S, ElemType *x) {
if (S->top == -1) {
return false;
}
*x = S->data[S->top];
return true;
}
bool IsPair(ElemType left, ElemType right) {
if (left == '(' && right == ')') {
return true;
}
return false;
}
bool IsCorrectExpr(char *str) {
Stack S;
InitStack(&S);
int i = 0;
while (str[i] != '\0') {
if (str[i] == '(') {
Push(&S, '(');
} else if (str[i] == ')') {
ElemType left;
if (Pop(&S, &left) && IsPair(left, str[i])) {
// do nothing
} else {
return false;
}
} else {
// ignore other characters
}
i++;
}
return S.top == -1;
}
int main() {
char str[MAXSIZE];
printf("请输入一个算术表达式:");
scanf("%s", str);
if (IsCorrectExpr(str)) {
printf("括号匹配正确\n");
} else {
printf("括号匹配错误\n");
}
return 0;
}
```
希望能够帮助您解决问题。如果有任何疑问,请随时提出。
阅读全文