括号匹配及表达式求值

本文介绍了栈在括号匹配和表达式求值中的应用。对于括号匹配,通过创建空栈,依次处理输入字符串,遇到左括号入栈,右括号时出栈并与左括号匹配。匹配失败的情况包括右括号单身、左右括号不匹配和左括号单身。在表达式求值方面,讨论了中缀表达式转后缀表达式的方法,以及后缀表达式的计算过程,强调了栈在处理运算顺序中的作用。

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

 1.1 栈在括号匹配中的应用  


假设表达式中允许包含三种括号:圆括号“( )”,中括号“[ ]”,花括号“{ }”。其嵌套顺序任意,即{ ( ( [ ] ) ) }或{ ( [ ] [ ] )}等均为正确的格式,{ ) [ ] ( }或{ [ ] ( ) {等均为不正确的格式。

则:输入由以上三种括号构成的字符串,如何判断字符串里括号格式的正确性?

问题分析:

1.最后出现的左括号最先被匹配(LIFO)——“栈”。

2.每出现一个右括号,就“消耗”一个左括号——“出栈”。

算法思路:

1.创建一个空栈,开始顺序扫描所有字符。

2.扫描到左括号,入栈。

3.扫描到右括号,则弹出栈顶元素(已入栈的左括号)。若栈为空,则退出报错。

4.检查两个括号是否匹配。若不匹配,则退出报错。

5.扫描完所有字符后,检查是否栈空,栈空说明匹配成功。若栈不空,说明还有左括号剩余,则退出报错。

匹配失败的三种情况:

1.右括号单身(右括号要匹配,栈已空)。

2.左右括号不匹配。

3.左括号单身(右括号匹配完,栈不为空)。

实现代码:

#define MaxSize 10            //定义栈中元素的最大个数
typedef struct{
    char data[MaxSize];       //静态数组存放栈中元素
    int top;                  //栈顶指针
}SqStack;
//初始化栈
void InitStack(SqStack &S){
    S.top = -1;
}
//判断栈是否为空
bool StackEmpty(SqStack S){
    if(S.top==-1)             //栈空
        return true;
    else
        return false;
}
//新元素入栈
bool Push(SqStack &S,char x){
    if(S.top=
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值