栈实现括号匹配

来源:互联网 发布:极品飞车10 知乎 编辑:程序博客网 时间:2024/06/05 15:32

//seqstack.h

#include<string.h>#include<malloc.h>#include<limits.h>#include<stdio.h>#include<io.h>#include<math.h>#include<process.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR -1#define INFEASIBLE -1#define MAXSIZE 100typedef char DataType;typedef struct{    DataType data[MAXSIZE];    int top;}SeqStack;void SStackSetNull(SeqStack *s){    s->top=-1;}int SStackIsEmpty(SeqStack *s){    return (s->top<0?TRUE:FALSE);}int SStackPush(SeqStack *s,DataType x){    if(s->top==MAXSIZE-1)    {        printf("溢出\n");        return FALSE;    }    else    {        s->top=s->top+1;        s->data[s->top]=x;        return TRUE;    }}int SStackPop(SeqStack *s,DataType *x){    if(s->top==-1)    {        printf("溢出\n");        return FALSE;    }    else    {        *x=s->data[s->top];        s->top--;        return TRUE;    }}DataType SStackGetTop(SeqStack *s){    if(s->top==-1)    {        printf("溢出\n");        return FALSE;    }    else return (s->data[s->top]);}void SStackPrint(SeqStack *s){    int p;    if(SStackIsEmpty(s)==TRUE)    {        printf("栈空\n");    }    else    {        printf("栈的数据元素如下:\n");        p=s->top;        while(p>=0)        {            printf("%d\n",s->data[p]);            p--;        }        printf("\n\n");    }}int SStackIsFull(SeqStack *s){    return (s->top==MAXSIZE-1?TRUE:FALSE);}

//main.cpp

#include"seqstack.h"int IsCorrect(char *str){    SeqStack st;    char x;    int i,flag=TRUE;    SStackSetNull(&st);    for(i=0;str[i]!='\0';i++)    {        switch(str[i])        {        case '(':            SStackPush(&st,'(');            break;        case '[':            SStackPush(&st,'[');            break;        case '{':            SStackPush(&st,'{');            break;        case ')':            if(!SStackPop(&st,&x) && x=='(')                flag=FALSE;            break;        case ']':            if(!SStackPop(&st,&x) && x=='[')                flag=FALSE;            break;        case '}':            if(!SStackPop(&st,&x) && x=='{')                flag=FALSE;            break;        }        if(!flag)            break;    }    if(SStackIsEmpty(&st)&&flag)        return TRUE;    else        return FALSE;}int main(){    char *str;    str=(char*)malloc(100*sizeof(char));    printf("请输入带括号的表达式子:\n");    while(scanf("%s",str)&&strcmp(str,"#"))    {        if(IsCorrect(str))        {            printf("括号匹配");        }        else        {            printf("括号不匹配");        }    }    return 0;}
原创粉丝点击