#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";
}
}
顺序栈的应用——括号匹配问题
最新推荐文章于 2022-10-16 11:14:13 发布