#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
typedef struct stack{
char arr[100];
int top;
}stack,*Pstack;
void init(Pstack t){
t->top=-1;
}
int isempty(Pstack t){//栈为空返回1
if(t->top==-1) return 1;
else return 0;
}
void push(Pstack t,char x){
t->arr[++t->top]=x;
}
char pop(Pstack t){
if(t->top==-1)
return -1;//栈为空,返回-1
else return t->arr[t->top--];
}
int ismatched(char a,char b){//匹配返回1
if((a=='{'&&b=='}')||(a=='('&&b==')')||(a=='['&&b==']')) return 1;
else return 0;
}
int main(){
Pstack t=(Pstack)malloc(sizeof(stack));
init(t);
char p;//取出的栈顶的元素
char c=getchar();
int flag=1;//用于标记是否匹配
while(c!='\n'){
if(c=='('||c=='{'||c=='[') //当输入左括号时,一律入栈
push(t,c);
else if(c==')'||c==']'||c=='}')
{
p=pop(t);
if(!ismatched(p,c)) lag=0;
}//输入右括号时,取出栈顶元素,并判断是否匹配来决定是否更改flag的值
c=getchar();
}
if(flag==1) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
栈的运用--表达式括号的匹配
最新推荐文章于 2021-04-30 16:22:53 发布