資料結構實驗之棧與佇列四:括號匹配
阿新 • • 發佈:2018-12-16
#include <stdio.h> #include <stdlib.h> #include <string.h> #define Stackmax 100 #define Stackincrement 10 #define TRUE 1 #define FALSE 0 typedef struct node { char *base; char *top; int stacksize; } sqstack; void initstack(sqstack *s) { s->base=s->top=(char *)malloc(sizeof(char)*Stackmax); if(!s->base) exit(-1); s->stacksize=Stackmax; } void push(sqstack *s,char e) { /*if(s->top-s->base>=s->stacksize)//棧溢位 { s->base=(char *)realloc(s->base,sizeof(char)*(s->stacksize+Stackincrement)); if(!s->base) exit(-1); s->top=s->base+s->stacksize; s->stacksize+=Stackincrement; } */ *(s->top)=e; s->top++; } char getpop(sqstack *s)//獲取棧頂值 { char x; if(s->top!=s->base) x=*(s->top-1); return x; } void pop(sqstack *s) { if(s->top!=s->base) s->top--; } int isempty(sqstack *s) { if(s->top==s->base) return TRUE;//true 字型變藍,是因為本來就有其的存在??? else return FALSE; } int main() { sqstack s; char a[101]; int i; int f; int len; while(gets(a)) { len=strlen(a); f=1; initstack(&s);//忘記了!!! for(i=0; i<=len-1; i++) { if(a[i]=='('||a[i]=='{'||a[i]=='[')//右括號入棧 push(&s,a[i]); else if(a[i]==')')//() { if(isempty(&s))//表示右括號多餘 空 { f=0; break; } else { if(getpop(&s)!='(')// { f=0; break; } else pop(&s); } } else if(a[i]=='}')//{} { if(isempty(&s))// 空 左括號多餘 { f=0; break; } else { if(getpop(&s)!='{')// { f=0; break; } else pop(&s); } } else if(a[i]==']')//[] { if(isempty(&s)) { f=0; break; } else { if(getpop(&s)!='[') { f=0; break; } else pop(&s); } } } if(f==1&&isempty(&s))//都匹配成功,即最後棧為空的 printf("yes\n"); else printf("no\n"); } return 0; }