顺序栈的应用——括号匹配问题

#include<bits/stdc++.h>
using namespace std;

#define Maxsize 110//定义栈中的最大元素
typedef struct
{
    char data[Maxsize];//静态数组存放栈中的元素
    int top;//栈顶指针,指向当前元素
}SqStack;


void InitStack(SqStack &s)//初始化栈
{
    s.top=-1;
}

bool push(SqStack &s,char x)//进栈
{
    if(s.top==Maxsize-1) return false;
    s.data[++s.top]=x;
    return true;
}

bool pop(SqStack &s,char &x)//出栈
{
    if(s.top==-1) return false;
    x=s.data[s.top--];
    return true;
}
bool EmptyStack(SqStack s)//判空
{
    if(s.top==-1)return true;
    else return false;
}
bool bracket_check(char a[],int length)//括号匹配的算法
{
    SqStack S;//建立一个栈
    InitStack(S);
    for(int i=0;i<length;i++)//依次扫描待处理的符号
    {
        char temp=a[i],temp1;//中间变量,暂存待处理的符号
        if(temp=='{'||temp=='['||temp=='(')//左括号
            push(S,temp);//进栈
        else//右括号
        {
            if(EmptyStack(S)) return false;//扫描到右括号但是当前的栈空,扫描失败
            pop(S,temp1);//出栈
            //判断括号是否匹配
            if(temp1=='('&&temp!=')') return false;
            if(temp1=='{'&&temp!='}') return false;
            if(temp1=='['&&temp!=']') return false;
        }
    }
    return EmptyStack(S);
}
int main()
{
    char a[]={'{','[',']','(',')','}'};
    if(bracket_check(a,6))
    {
        cout<<"success!";

    }
    else
    {
        cout<<"fault";
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值