資料結構C語言版之括號匹配
阿新 • • 發佈:2019-02-05
//括號匹配: #include<stdio.h> #include<stdlib.h> #define Stack_size 100 #define Stackincreament 10 typedef struct{ char *base; int top; int stacksize; }sqstack; void initstack(sqstack &la) { la.base=(char*)malloc(Stack_size*sizeof(char)); la.stacksize=Stack_size; if(!la.base) exit(0); la.top=0; } void push(sqstack &L,char e) { if(L.top>=L.stacksize) { L.base=(char*)realloc(L.base,(Stack_size+Stackincreament)*sizeof(char)); if(!L.base) exit(0); L.stacksize+=Stackincreament; } L.base[L.top++]=e; } void pop(sqstack &l,char &e) { if(l.top==0) return; e=l.base[--l.top]; } int allbraket(char *str) { sqstack s; char *p,ch; p=str; initstack(s); while(*p!='\0') { if(*p=='{'||*p=='['||*p=='(') push(s,*p); else if(*p=='}'||*p==']'||*p==')') { if(s.top==0) return 0; else { pop(s,ch); if(*p==')'&&ch!='(') return 0; if(*p=='}'&&ch!='{') return 0; if(*p==']'&&ch!='[') return 0; } } p++; } if(s.top==0) return 1; return 0; } int main() { char str[20]; gets(str); if(allbraket(str)) printf("括號匹配\n"); else printf("括號不匹配\n"); printf("\n"); return 0; }