C語言資料結構之棧與佇列的應用(2)
阿新 • • 發佈:2019-01-31
輸入一個表示式,表示式中包括三種括號“()”、“[]”和“{}”,判斷該表示式的括號是否匹配。
#include<stdio.h> #include<stdlib.h> #define MAX 20 #define STACKINCREMENT 10 typedef struct{ char *base; char *top; int stacksize; }SqStack; void InitStack(SqStack &s){ //構造空棧 s.base=(char *)malloc(MAX *sizeof(char)); if(!s.base)exit(0); s.top=s.base; s.stacksize=MAX; } void Push(SqStack &s,int e){ 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+=STACKINCREMENT; } *s.top++=e; } void Pop(SqStack &s,int &e){ if(s.top==s.base) exit(0); e=*--s.top; } int stackEmpty(SqStack s) { if(s.top==s.base) return 1; return 0; } int AllBracket(char*str) { SqStack s; char *p; int ch; InitStack(s); p=str; while(*p!='\0'){ if(*p=='('||*p=='['||*p=='{') Push(s,*p); else if(*p==')'||*p==']'||*p=='}'){ if(stackEmpty(s)){ printf("不匹配\n"); return 0; } Pop(s,ch); if(*p==')'&&ch!='('){ printf("不匹配\n"); return 0; } if(*p==']'&&ch!='['){ printf("不匹配\n"); return 0;} if(*p=='}'&&ch!='{'){ printf("不匹配\n"); return 0; } } p++; } if(stackEmpty(s)){ printf("匹配\n"); return 1; } return 0; } int main(){ char str[80]; printf("請輸入表示式:"); gets(str); AllBracket(str); return 0; }