括号配对问题

本文介绍了一个使用栈数据结构实现的括号匹配算法,该算法能够判断一个包含圆括号、方括号和花括号的表达式中括号是否正确配对。通过逐个检查字符并利用栈来跟踪未闭合的括号,最终确定整个表达式的括号是否匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“ ”,且这三种括号可按任意的次序嵌套使用(如:…[…{… …[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的算法。输出结果YES 或者 NO。

 

#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main()
{
string s;
char a;
int i;
stack<char>st;//构建一个栈
while(cin>>s)
{
st.empty();//清空栈
for(i=0;i<s.size();i++)
{
a=s[i];
if(a=='{'||a=='['||a=='(')
st.push(a);//入栈
else if(a=='}')
{
if(st.top()=='{')
st.pop();
}
else if(a==']')
{
if(st.top()=='[')
st.pop();//出栈
}
else if(a==')')
{
if(st.top()=='(')
st.pop();
}

}
if(!st.empty())//判断栈是否为空
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
}
return 0;
}

小总结

stack<int> sta;
入栈:sta.push(x);
出栈:sta.pop();
判断栈的大小: sta.size();
判断栈是否为空:sta.empty();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值