当前位置:网站首页>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;
}
边栏推荐
- Construction and maintenance of business websites [10]
- 【OpenCV】-5种图像滤波的综合示例
- 【深度学习】infomap 人脸聚类 facecluster
- Open那啥的搭建文档
- Sword finger offer 62 The last remaining number in the circle
- leetcode2310. 个位数字为 K 的整数之和(中等,周赛)
- Regular expression learning notes
- Post infiltration flow encryption
- Failed to transform file 'xxx' to match attributes
- C language 3-7 daffodils (enhanced version)
猜你喜欢
MySQL主从延迟问题怎么解决
What is the MySQL column to row function
How to turn off debug information in rtl8189fs
Golang lock
Discussion on the idea of platform construction
New news, Wuhan Yangluo international port, filled with black technology, refreshes your understanding of the port
What are the necessary things for students to start school? Ranking list of Bluetooth headsets with good sound quality
A quick understanding of analog electricity
剑指 Offer 62. 圆圈中最后剩下的数字
Spend a week painstakingly sorting out the interview questions and answers of high-frequency software testing / automated testing
随机推荐
An analysis of circuit for quick understanding
new和malloc的区别
How to solve MySQL master-slave delay problem
Spend a week painstakingly sorting out the interview questions and answers of high-frequency software testing / automated testing
Implementation principle of city selector component
Deep learning: a solution to over fitting in deep neural networks
Opengauss database backup and recovery guide
leetcode2309. The best English letters with both upper and lower case (simple, weekly)
STM32F103——两路PWM控制电机
[Video] visual interpretation of Markov chain principle and Mrs example of R language region conversion | data sharing
D discard the virtual recovery method
mysql列转行函数指的是什么
There are spaces in the for loop variable in the shell -- IFS variable
pytest 测试框架
Architecture evolution from MVC to DDD
Implementation of Weibo system based on SSM
If you want to rewind the video picture, what simple methods can you use?
479. Additive binary tree (interval DP on the tree)
Which is a good Bluetooth headset of about 300? 2022 high cost performance Bluetooth headset inventory
【LeetCode 43】236. The nearest common ancestor of binary tree