括号匹配

来源:互联网 发布:单片机复位电路原理 编辑:程序博客网 时间: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