括号匹配
来源:互联网 发布:单片机复位电路原理 编辑:程序博客网 时间:2024/05/21 17:56
括号匹配
描述假设一个算术表达式中可以包含三种括号:圆括号"("和")",方括号"["和"]"和花括号"{"和"}",且这三种括号可按任意的次序嵌套使用,如:...[...(...)...{...{...}...[...]...}...]...,编写程序判别给定表达式中所含括号是否正确配对出现。 输入输入一个由这几种括号组成的字符串,字符串长度不大于100。 输出若正确则输出"Yes",否则输出"No"。注意字母的大小写,结尾带回车。 输入样例{()[]}{} 输出样例Yes
#include <stdio.h>#include <stdlib.h>#define MAXNUM 100#define SizeAdd 10//typedef char CharType;typedef char ElemType;typedef struct{ int *base; int *top; int stackSize;}sqStack;void InitStack(sqStack *s){ s->base=(int *)malloc(MAXNUM * sizeof(ElemType)); s->top=s->base; s->stackSize=MAXNUM;}void PushStack(sqStack *s,ElemType e){ if(s->top-s->base>=s->stackSize) { s->stackSize+=SizeAdd; s->base=(int *)realloc(s->base,s->stackSize*sizeof(ElemType)); s->top=s->base+s->stackSize; } *(s->top)=e; s->top++;}void PopStack(sqStack *s,ElemType *e){ if(s->top==s->base) return; *e=*--(s->top);}int StackLen(sqStack *s){ return (s->top-s->base);}int Match(char e,char c){ if(e=='('&&c==')') return 1; if(e=='['&&c==']') return 1; if(e=='{'&&c=='}') return 1; return 0;}int main(){ sqStack s; char c,e; InitStack(&s); scanf("%c",&c); while(c!='\n') { if(!StackLen(&s)) PushStack(&s,c); else { PopStack(&s,&e); if(!Match(e,c)) { PushStack(&s,e); PushStack(&s,c); } } scanf("%c",&c); } //PopStack(&s,&e); //printf("test1\n"); if(!StackLen(&s)) { printf("Yes\n"); //printf("test1\n"); } else printf("No\n"); return 0;}
0 0