#include <stdio.h>
#include <stdlib.h>
#define MaxSize 50
typedef char ElemType;
typedef struct{
ElemType data[MaxSize];
int top;
}SqStack;
void InitStack(SqStack &S){
S.top = -1;
}
bool StackEmpty(SqStack &S){
if(-1 == S.top) return true;
else return false;
}
bool Push(SqStack &S,ElemType x){
if(MaxSize - 1 == S.top) return false;
S.data[++S.top] = x;
return true;
}
bool Pop(SqStack &S,ElemType &x){
if(-1 == S.top) return false;
x = S.data[S.top--];
return true;
}
bool GetTop(SqStack &S,ElemType &x){
if(-1 == S.top) return false;
x = S.data[S.top];
return true;
}
char * s_gets(char * st, int n){
char * ret_val;
int i = 0;
ret_val = fgets(st, n, stdin);
if(ret_val){
while (st[i] != '\n' && st[i] != '\0')
i++;
if(st[i] == '\n'){
st[i] = '\0';
}else{
while(getchar() != '\n')
continue;
}
}
return ret_val;
}
SqStack S;
bool Match(char * input){
ElemType data;
while(*input != '\0'){
switch (*input){
case '(':
Push(S,*input);
break;
case '[':
Push(S,*input);
break;
case '{':
Push(S,*input);
break;
case ')':
Pop(S,data);
if(data != '('){
return false;
}
break;
case '}':
Pop(S,data);
if(data != '{'){
return false;
}
break;
case ']':
Pop(S,data);
if(data != '['){
return false;
}
break;
}
input++;
}
if(StackEmpty(S)) return true;
else return false;
}
int main(){
InitStack(S);
char input[50];
s_gets(input,50);
printf("%s",input);
bool ret_val = Match(input);
if(ret_val) printf("Yes");
else printf("No");
return 0;
}
栈应用--括号匹配
发布时间 2023-03-26 22:30:21作者: 破忒头头