您的位置:首页 > 其它

用栈来实现 括号匹配

2016-04-19 19:13 225 查看
#include<stdio.h>#include<stdlib.h>#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;typedef char SElemType;typedef struct{    SElemType *base;    SElemType *top;    int stacksize;} SqStack;Status InitStack(SqStack *S){    S->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));    S->top=S->base;    S->stacksize=STACK_INIT_SIZE;    return OK;}Status StackEmpty(SqStack *S){    if(S->top!=S->base) return ERROR;    return OK;}Status Push(SqStack *S,SElemType e){    if(S->top-S->base>=S->stacksize)    {        S->base=(SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType));        if (!S->base)exit(OVERFLOW);        S->top=S->base+S->stacksize;        S->stacksize+=STACKINCREMENT;    }    *S->top++=e;    return OK;}Status Pop(SqStack *S,SElemType*e){    if(S->top==S->base) return ERROR;    *e=*--S->top;    return OK;}Status Bracket(SqStack *S,char *str){    int i=0,flag1=0,flag2;    SElemType e;    while(str[i]!='\0')    {        switch(str[i])        {        case '(':            Push(S,'(');            break;        case '[':            Push(S,'[');            break;        case '{':            Push(S,'{');            break;        case ')':        {            if(StackEmpty(S))            {                flag1=1;                break;            }            Pop(S,&e);            if(e!='(')                flag1=1;            break;        }        case ']':        {            if(StackEmpty(S))            {                flag1=1;                break;            }            Pop(S,&e);            if(e!='[')                flag1=1;            break;        }        case '}':        {            if(StackEmpty(S))            {                flag1=1;                break;            }            Pop(S,&e);            if(e!='{')                flag1=1;            break;        }        default:            break;        }        if(flag1) break;        i++;    }    flag2=StackEmpty(S);    if(!flag1 && flag2) printf("It is ok!\n");    else printf("It is error!\n");    return OK;}int  main(){    char str[255];    SqStack S;    InitStack(&S);    printf("enter a cross:");    scanf("%s",str);    Bracket(&S,str);    printf("\n");}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: