使用顺序栈并没有引用到指针,相较来说更好理解其基本逻辑。
代码思路来自b站up主计算机小姐姐https://www.bilibili.com/video/BV1zf4y1U7KT/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=c1b597705d1b51261ad11f6e3c808e5e
只是完善一下整个代码以及简单构造了一下类,使其能运行成功并实现其功能。
#include<iostream>
using namespace std;
const int Maxsize=100;
template<class Datatype>
class Seqstack
{
public:
Seqstack()
{
top=-1;
}
int balanced(char exp[]) //入栈
{
for(int i=0;exp[i]!='\0';++i)
{
if(exp[i]=='('||exp[i]=='{'||exp[i]=='[')
s[++top]=exp[i];
if(exp[i]==')'||exp[i]=='}'||exp[i]==']')
{
if(top==-1) return 0;
char left =s[top--];
if(isMatched(left,exp[i])==0)break;
}
}
if(top==-1) //判空 为空时则代表匹配成功
return 0;
else
return 1;
}
int isMatched(char left,char right) //匹配
{
if(left=='('&&right==')')
return 1;
else if(left=='{'&&right=='}')
return 1;
else if(left=='['&&right==']')
return 1;
else
return 0;
}
private:
char s[Maxsize];
int top;
};
int main()
{
char s[10]="({[}])";
Seqstack<char>S;
int n=S.balanced(s);
if(n==0) cout<<"匹配成功";
if(n==1) cout<<"匹配失败";
}