#include<stdio.h> #include<stdlib.h> #include<ctype.h> #define STACK_INIT_SIZE 20 #define STACKINCREMENT 10 typedef struct{ char *top; char *base; int stacksize; }sqStack; void StackInit(sqStack *s) { s->base=(char*)malloc(sizeof(char)*STACK_INIT_SIZE); if(!s->base) exit(0); s->top=s->base; s->stacksize=STACK_INIT_SIZE; } void Push(sqStack *s,char e) //push in { if(s->top-s->base>=s->stacksize) { s->base=(char*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(char)); if(!s->base) exit(0); s->top=s->base+s->stacksize; s->stacksize=s->stacksize+STACKINCREMENT; } *(s->top)=e; s->top++; } void Pop(sqStack *s,char *e)//pop out { if(s->base==s->top)return; *e=*--(s->top); } int StackLen(sqStack s) { return (s.top-s.base); } int match(char c,char e) { if((c=='['&&e==']')||(c=='{'&&e=='}')) return 0; else return 1; } void Print(sqStack s) { } void main() { sqStack s; StackInit(&s); char c; char e; scanf_s("%c",&c,1); while (c!='#') { if(!StackLen(s)) Push(&s,c); else { Pop(&s,&e); printf("----%c-----\n",e); if(!match(c,e)) { Push(&s,e); Push(&s,c); } else { printf("----match-----\n"); } } Print(s); printf("SIZE:%d\n",StackLen(s)); scanf_s("%c",&c,1); } if(!StackLen(s)) printf("YES!\n"); else printf("NO!\n"); }
括號匹配
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.