|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这段代码有一些问题:
1. 没有包含所需的头文件。
2. 定义了两个相同的结构体opnds和optrs,可以只定义一个结构体用于存放栈。
3. Push函数和Pop函数中没有正确地处理栈顶元素的赋值。
下面是修正后的代码:
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- #define MaxSize 50
- typedef struct
- {
- char data[MaxSize];
- int top;
- } Stack;
- void Init_Stack(Stack *&S)
- {
- S = (Stack *)malloc(sizeof(Stack));
- S->top = -1;
- }
- bool Push(Stack *&S, char e)
- {
- if(S->top == MaxSize - 1)
- return false;
- S->top++;
- S->data[S->top] = e;
- return true;
- }
- bool Pop(Stack *&S, char &e)
- {
- if(S->top == -1)
- return false;
- e = S->data[S->top];
- S->top --;
- return true;
- }
- bool GetTop(Stack *&S, char &e)
- {
- if(S->top == -1)
- return false;
- e = S->data[S->top];
- return true;
- }
- bool Match(char *p)
- {
- int i;
- Stack *S;
- char topChar;
-
- Init_Stack(S);
- for(i = 0; p[i] != '\0'; i++)
- {
- if(p[i] == '(')
- {
- Push(S, p[i]); // 将左括号入栈
- }
- else if(p[i] == ')')
- {
- if(!Pop(S, topChar)) // 如果栈空,说明右括号没有匹配的左括号
- return false;
- }
- }
- if(S->top != -1)
- return false;
- else
- return true;
- }
- int main()
- {
- char p[MaxSize];
- int i;
- printf("请输入算术运算表达式:\n");
- gets(p);
- if(Match(p))
- printf("括号匹配成功!\n");
- else
- printf("括号匹配失败!\n");
- return 0;
- }
复制代码
这段代码实现了检查一个表达式中的括号是否匹配。根据输入的表达式,使用堆栈来检查左右括号的匹配情况。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
|