中缀算术表达式->后缀算术表达式(逆波兰式(不含括号))的函数算法思想:
链接:逆波兰式的百度百科
逆波兰式求值的算法思想:
栈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