Stack的应用——符号匹配问题

#include #include #include #include #include #define TRUE 1 #define FALSE 0 #define Stack_Size 50 typedef struct { int elem[Stack_Size]; int top; }SeqStack; int Match(char a,char b) { if((a=='{' && b=='}')||(a=='(' && b==')')||(a=='[' && b==']')) { return(TRUE); } else return(FALSE); } void InitStack(SeqStack *S) { S->top=-1; } int IsEmpty(SeqStack *S) { return(S->top==-1?TRUE:FALSE); } int IsFull(SeqStack *S) { return(S->top==Stack_Size-1?TRUE:FALSE); } int Push(SeqStack *S,char x) { if(S->top==Stack_Size-1)return(FALSE); S->top++; S->elem[S->top]=x; return(TRUE); } int Pop(SeqStack *S,char *x) { if(S->top==-1) return(FALSE); else { *x=S->elem[S->top]; S->top--; return(TRUE); } } int GetTop(SeqStack *S,char *x) { if(S->top==-1) return(FALSE); else { *x=S->elem[S->top]; return(TRUE); } } void BracketMatch(char *str) { SeqStack S; int i; char ch; InitStack(&S); for(i=0;str[i]!='/0';i++) { switch(str[i]) { case '(': case '[': case '{': Push(&S,str[i]); break; case ')': case ']': case '}': if(IsEmpty(&S)) { printf("/n右括号多余!"); return; } else { GetTop(&S,&ch); if(Match(ch,str[i])==1) Pop(&S,&ch); else { printf("/n对应的左右括号不同类!"); return; } } } } if(IsEmpty(&S)) printf("/n 括号匹配"); else printf("/n左括号多余!"); } int main() { int i; i=0; char str[50]; printf("请输入括号/n"); scanf("%s",str); BracketMatch(str); return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值