2020-11-03 中缀算术表达式->后缀算术表达式(逆波兰式),并对逆波兰式求值

这篇博客介绍了如何将中缀算术表达式转换为后缀表达式(逆波兰式),并详细阐述了逆波兰式求值的算法过程。通过使用栈的数据结构,解释了在没有括号的情况下,如何利用栈来实现表达式的运算。算法思路包括创建栈S1、S2,将S逆置,并在遍历过程中根据运算符和操作数进行相应的计算,最终得到计算结果。
摘要由CSDN通过智能技术生成

中缀算术表达式->后缀算术表达式(逆波兰式(不含括号))的函数算法思想:
在这里插入图片描述

链接:逆波兰式的百度百科

逆波兰式求值的算法思想:
栈S存放逆波兰式,现开辟栈S1、S2,S1存放S的逆置
然后每次弹出S1的栈顶元素e,若为操作数,则直接将e压入栈S2中;若为运算符,则弹出S2的两个元素e1、e2,然后进行运算(即e1 e e2(e1、e2为操作数,e为运算符)),然后将运算结果重新压入栈S2中,一直循环,直至S1为空循环结束
链接:csdn—逆波兰式求值

//中缀算术表达式->后缀算术表达式(逆波兰式)
//前缀表达式是波兰式

//刚开始做的时候是把单个字符char作为栈的元素类型,但这样的话不能对>=10的数以及小数进行操作
//所以最后把栈的元素类型改为string,输入空格作为单次cin的停止,进而将string存入栈中

//最终目的:可以测试>=10的数以及小数(已完成,使用了string作为栈的元素类型,
//不过需要注意的是string与string输入的时候之间要有空格作为两者的分割)

#include<iostream>
#include<cctype>//包含isdigit()函数
#include<cstdlib>//包含atof函数
//to_string()函数是全局函数
using namespace std;
#define SElemType string
typedef struct SNode
{
    SElemType data;
    struct SNode* prior,* next;
}SNode,* Slink;

typedef struct
{
    Slink head,tail;
    int length;
}Stack;

bool Init_Stack(Stack& S)
{
    S.head=S.tail=new SNode;
    if(!S.head) exit(-2);
    S.head->next=S.head->prior=nullptr;
    S.length=0;
    return true;
}

bool IsEmpty(Stack S)
{
    if(!S.length) return true;
    return false;
}

SElemType GetTop(S
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值