当前位置:网站首页>Infix expression to suffix expression (computer) code
Infix expression to suffix expression (computer) code
2022-07-02 02:09:00 【Abright_】
The code idea is taken from the kingly data structure
Ideas
Initialize a stack , It is used to save operators whose operation order cannot be determined temporarily .
Process elements from left to right , Till the end . There are three possible situations
① Encountered operand . Add suffix expression directly .
② Delimiter encountered . encounter “(” Direct entry ; encounter “)” Then pop up the operators in the stack in turn and add the suffix expression , until
eject “(” until . Be careful :“("” Do not add suffix expression
③ Operator encountered . Pop up all operators in the stack with priority higher than or equal to the current operator , And add suffix expression ,
If you encounter “(” Or if the stack is empty, stop . Then put the current operator on the stack .
After all characters are processed as described above , Pop up the remaining operators in the stack in turn , And add suffix expression .
flow chart
I drew a flow chart according to my own ideas , Not in accordance with the specifications .

Code
#include <iostream>
#include <string.h>
using namespace std;
#define MaxSize 10
typedef struct{
char data[MaxSize];// Static arrays hold the elements in the stack
int top;// To the top of the stack
} SqStack;
void InitStack(SqStack &S){
S.top = -1;// Initialize the stack top pointer
memset(S.data,'0', MaxSize);
}
bool StackEmpty(SqStack S){
if(S.top==-1)// Empty stack
return true;
else
return false;
}
bool Push(SqStack &S,char x){
if (S.top==MaxSize-1)
return false;
S.top += 1;
S.data[S.top] = x;
return true;
}
bool Pop(SqStack &S,char &x){
if(S.top==-1)
return false;
x = S.data[S.top];
S.top -= 1;
return true;
}
// Get stack header
char GetHead(SqStack S){
if(StackEmpty(S))
return 'c';
return S.data[S.top];
}
/**
* Determine operator priority
*/
int GetPrioraty(char c){
switch (c)
{
case '+':
case '-':
return 1;
break;
case '*':
case '/':
return 2;
break;
default:
return 0;
break;
}
}
// Compare the priority of two characters
bool Prioraty(char c,char p){
return GetPrioraty(c) <= GetPrioraty(p);
}
// Determine character type
int StrType(char c){
if(isdigit(c)){
return 1;
}
if(c=='('||c==')'){
return 2;
}
if(c=='+'||c=='*'||c=='-'||c=='/'){
return 3;
}
}
string ZzToHz(string str){
SqStack S;
InitStack(S);
string zzbds;
for (size_t i = 0; i < str.size(); i++)
{
char cur = str.at(i);
int opt = StrType(cur);
if(opt==1){// Operand direct splicing
zzbds.push_back(cur);
continue;
}else if(opt==2){
if(cur=='('){
Push(S, cur);
continue;
}
char follow;
while(Pop(S, follow)&&follow!='('){
zzbds.push_back(follow);
}
}else if(opt==3){
char stackHead = GetHead(S);
if(StackEmpty(S)||stackHead=='('){// Fetch ( Or if you can't get any number and the stack is empty, press the operator directly into the stack
Push(S, cur);
continue;
}
if(Prioraty(cur,stackHead)){
while (true)// Need to pop up
{
stackHead = GetHead(S);
if(StackEmpty(S)||stackHead=='('){
break;
}
if(Prioraty(cur,stackHead)){
zzbds.push_back(stackHead);
S.top--;
}
}
}
Push(S, cur);
}
}
while (!StackEmpty(S))// Splice the remaining elements in the stack
{
char stacHead=GetHead(S);
if(stacHead!='('){
zzbds.push_back(stacHead);
S.top--;
}
}
return zzbds;
}
int main(int argc, char const *argv[])
{
string zz("1+2*(3-4)-5/6");
cout << ZzToHz(zz) << endl;
return 0;
}
边栏推荐
- 2022 Q2 - 提升技能的技巧总结
- How to build and use redis environment
- * and & symbols in C language
- SQLite 3 of embedded database
- STM32F103——两路PWM控制电机
- 软件开发生命周期 --瀑布模型
- 2022 Q2 - résumé des compétences pour améliorer les compétences
- Iterative unified writing method of binary tree
- Implementation principle of city selector component
- DNS domain name resolution
猜你喜欢

【OpenCV】-5种图像滤波的综合示例

How to build and use redis environment

1222. Password dropping (interval DP, bracket matching)

如何远程、在线调试app?

MySQL约束与多表查询实例分析

With the innovation and upgrading of development tools, Kunpeng promotes the "bamboo forest" growth of the computing industry

附加:信息脱敏;

分卷压缩,解压

What style of Bluetooth headset is easy to use? High quality Bluetooth headset ranking

【视频】马尔可夫链原理可视化解释与R语言区制转换MRS实例|数据分享
随机推荐
2022 Q2 - Summary of skills to improve skills
Pytest testing framework
D discard the virtual recovery method
CSDN insertion directory in 1 second
1222. Password dropping (interval DP, bracket matching)
AR增强现实可应用的场景
附加:信息脱敏;
Based on configured schedule, the given trigger will never fire
Open那啥的搭建文档
Sword finger offer 31 Stack push in and pop-up sequence
【深度学习】infomap 人脸聚类 facecluster
Which is a good Bluetooth headset of about 300? 2022 high cost performance Bluetooth headset inventory
自动浏览拼多多商品
How does MySQL solve the problem of not releasing space after deleting a large amount of data
Is the knowledge of University useless and outdated?
医药管理系统(大一下C语言课设)
MySQL主从延迟问题怎么解决
RTL8189FS如何关闭Debug信息
mysql列转行函数指的是什么
Webgpu (I): basic concepts