括号匹配--数据结构--C语言

#include<stdio.h>//用栈实现括号匹配:

#define maxize 10//定义了maxize的值是10;

typedef int ;

typedef struct

    char data[maxize]; //静态数组存放栈中元素

    int top;  //当前栈顶元素

} SqStack;

int b1(char str[],int length);//匹配括号

void initStack(SqStack *s);//构造一个空栈s

int stackEmpty(SqStack s);//判断栈是否为空

int push(SqStack *s,char e);//插入元素e为新的栈顶元素

int pop(SqStack *s,char *e);//删除栈顶元素返回e值

int getTop(SqStack s,char *e);//返回栈顶元素

void print(SqStack s);//出栈

int b1(char str[],int length)

{

    SqStack s;

   initStack(&s);

    int i;

    for(i=0; i<length; i++)//扫描左括号,入栈

    {

        if(str[i]=='('||str[i]=='{'||str[i]=='[')

        {

            push(&s,str[i]);

        }

        else//扫描遇到右括号,且当前栈空,则匹配失败

        {

            if(stackEmpty(s))

            {

                return 0;

            }

            char e;

            pop(&s,&e);//左右括号不匹配,则匹配失败

            if(str[i]==')'&&e!='(')

            {

                return 0;

            }

            if(str[i]=='}'&&e!='{')

            {

                return 0;

            }

            if(str[i]==']'&&e!='[')

            {

                return 0;

            }

        }

    } //考虑左括号是不是为0

    return stackEmpty(s);

}

void initStack(SqStack *s)

{

    s->top=-1;//构造空栈

}



int stackEmpty(SqStack s)

{

    if(s.top>=0)//判断栈是否为空

    {

        return 0;

    }

    return 1;

}

int push(SqStack *s,char e)

{

    if(s->top==maxize-1)

    {

        return 0;

    }

    s->top=s->top+1;

    s->data[s->top]=e;//插入元素

    return 1;

}



int pop(SqStack *s,char *e)

{

    if(s->top==-1)

    {

        return 0;

    }

    *e=s->data[s->top];

    s->top=s->top-1;

    return 1;

}

int getTop(SqStack s,char *e)

{

    if(s.top==-1)//判断栈是否存在且非空

    {

        return 0;

    }

    *e=s.data[s.top];

    return 1;

}

void print(SqStack s)

{

    int i;

    for(i=s.top; i>=0; i--)//全部出栈

    {

        printf("%c ",s.data[i]);

    }

    printf(" ");

}

int main()

{

    char str[]= {'[','{','(',')','}',']'};//输入所需匹配的符号

    int lenth=sizeof(str)/sizeof(char);

    if(b1(str,lenth))

    {

        printf("括号匹配 ");//匹配失败

    }

    else

    {

        printf("括号不匹配 ");//匹配成功

    }

    return 0;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小孙同志在学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值