#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; }
Stack的应用——符号匹配问题
最新推荐文章于 2024-04-27 23:28:16 发布