当前位置:网站首页>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;
}
边栏推荐
- MySQL约束与多表查询实例分析
- AR增强现实可应用的场景
- 剑指 Offer 31. 栈的压入、弹出序列
- leetcode2309. 兼具大小写的最好英文字母(简单,周赛)
- Architecture evolution from MVC to DDD
- Types of exhibition items available in the multimedia interactive exhibition hall
- Data analysis on the disaster of Titanic
- 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
- MySQL view concept, create view, view, modify view, delete view
猜你喜欢

What are the necessary things for students to start school? Ranking list of Bluetooth headsets with good sound quality

Architecture evolution from MVC to DDD

Implementation of Weibo system based on SSM

Medical management system (C language course for freshmen)

The concepts and differences between MySQL stored procedures and stored functions, as well as how to create them, the role of delimiter, the viewing, modification, deletion of stored procedures and fu

mysql列转行函数指的是什么

New news, Wuhan Yangluo international port, filled with black technology, refreshes your understanding of the port

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

Pytest testing framework

leetcode373. 查找和最小的 K 对数字(中等)
随机推荐
Types of exhibition items available in the multimedia interactive exhibition hall
Implementation principle of city selector component
MySQL constraints and multi table query example analysis
Sword finger offer 42 Maximum sum of continuous subarrays
剑指 Offer 42. 连续子数组的最大和
Redis环境搭建和使用的方法
479. Additive binary tree (interval DP on the tree)
Golang lock
Discussion on the idea of platform construction
开发工具创新升级,鲲鹏推进计算产业“竹林”式生长
[graduation season] graduate seniors share how to make undergraduate more meaningful
Logging only errors to the console Set system property ‘log4j2. debug‘ to sh
Open that kind of construction document
D discard the virtual recovery method
JMeter (I) - download, installation and plug-in management
MySQL中一条SQL是怎么执行的
leetcode2311. Longest binary subsequence less than or equal to K (medium, weekly)
RTL8189FS如何关闭Debug信息
牛客网——华为题库(51~60)
Parted command