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; }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章