括号匹配(栈)

来源:互联网 发布:javascript 转为java 编辑:程序博客网 时间:2024/05/29 12:10
#include<stdio.h>#include<stdlib.h>#define OK 1#define ERROR 0#define NULL 0#define maxSize 100typedef struct {    char *top;    char *base;    int size;}stack;int initStack(stack &s){    if(!(s.base=s.top=(char *)malloc(maxSize*sizeof(char))))        return ERROR;    s.size=maxSize;    return OK;}int push(stack &s,int e){    *s.top++=e;    return OK;}int isEmpty(stack s){    return s.top==s.base?OK:ERROR;}char pop(stack &s,char &e){    if(isEmpty(s))        return ERROR;    s.top--;    e=*s.top;    return e;}int match(){    stack s;    initStack(s);    char str[100],e,t;    int flag=1,i=0,length;    scanf("%c",&str[i]);    while(str[i]!='\n')        scanf("%c",&str[++i]);    length=i-1;    i=0;    push(s,str[i]);    if(str[i]=='}'||str[i]==']'||str[i]==')')   flag=0;       //the first element                     else while(i<length)    {        i++;        if(str[i]==']')        {            t=pop(s,e);            if(t!='[')            {                flag=0;break;            }        }        else if(str[i]=='}')        {            t=pop(s,e);            if(t!='{')            {                flag=0;break;            }        }        else if(str[i]==')')        {            t=pop(s,e);            if(t!='(')            {                flag=0;break;            }        }        else            push(s,str[i]);    }    if(!isEmpty(s))        flag=0;    return flag;}int main(){    int result;    printf("input bracket:\n");    result=match();    if(result)        printf("match!\n");    else        printf("not match!\n");    return 0;}
0 0
原创粉丝点击