借助栈来实现单链表的逆置运算_中缀后缀表达式转换

借助栈来实现单链表的逆置运算_中缀后缀表达式转换原题链接算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。输入格式:输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。输出格式:在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。输入样例:2+3*(7-4)+8/4输出样例:2 3 7 4 – * + 8 4 / +注意

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

原题链接
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。

输入格式:
输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。

输出格式:
在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。

输入样例:

2+3*(7-4)+8/4

输出样例:

2 3 7 4 - * + 8 4 / +

注意
数字前面有正负号和小数的情况

#include<bits/stdc++.h>
#define x first
#define y second
#define send string::npos
#define lowbit(x) (x&(-x))
using namespace std;
typedef long long ll;
const int N = 1e4 + 10;
const int M = 3 * N;
const int INF = 0x3f3f3f3f;
typedef pair<int,int> PII;
typedef struct Node * pnode;
    string line;
char isSignal(int u){ 
   
    if((line[u] == '+' && !(u - 1 == -1 || line[u -1] == '(' || line[u - 1] == '+' || line[u - 1] == '-'||line[u - 1] == '*'||line[u - 1] == '/'))  //此+号是运算符
       ||(line[u] == '-' && !(u - 1 == -1 || line[u -1] == '(' || line[u - 1] == '+' || line[u - 1] == '-'||line[u - 1] == '*'||line[u - 1] == '/'))    //此-号是运算符
       || line[u] == '/' || line[u] == '*' || line[u] == '(' || line[u] == ')')return true;
    else return false;
}
string getNum(int &u){ 
   
    bool flag = false;
    if(line[u] == '-' || line[u] == '+'){ 
   
        if(line[u] == '-')flag = true;
        u ++;
    }
    int i = u;
    while(isalnum(line[u]) || line[u] == '.')
        u ++;
    string re = "";
    if(flag)re = "-";
    re +=line.substr(i,u - i);
    return re;
}
int main(){ 
   
    getline(cin,line);
    int i = 0;
    string num;
    vector<string> res;
    stack<char>s;
    stringstream word;
    string x;
    while(i < line.size()){ 
   
        word.clear();
        if(isSignal(i)){ 
   
            if(line[i] == '*' || line[i] == '/'){ 
   
                s.push(line[i]);
            }
            else if(line[i] == '+' || line[i] == '-'){ 
   
                while(!s.empty() && (s.top() == '/' || s.top() == '*'|| s.top() == '+' || s.top() == '-')){ 
   
                    word.clear();
                    word << s.top();
                    word >> x;
                    res.push_back(x);
                    s.pop();
                }
                s.push(line[i]);
            }
            else if(line[i] == '('){ 
   
                s.push(line[i]);
            }else if(line[i] == ')'){ 
   
                while(!s.empty() && s.top() != '('){ 
   
                    word.clear();
                    word << s.top();
                    word >> x;
                    res.push_back(x);
                    s.pop();
                }
                if(s.top() == '(')s.pop();
            }
            i ++;
        }else { 
   
            num = getNum(i);
            word << num;
            word >> x;
            res.push_back(x);
        }
    }
    while(!s.empty()){ 
   
        word.clear();
        word << s.top();
        word >> x;
        res.push_back(x);
        s.pop();
    }
    cout<<res[0];
    for(int i = 1;i < res.size();i ++)
       cout<<" "<<res[i];

    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168913.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java + opencv 实现人脸识别,图片人脸识别、视频人脸识别、摄像头实时人脸识别

    Java + opencv 实现人脸识别,图片人脸识别、视频人脸识别、摄像头实时人脸识别opencv人脸识别

    2022年5月18日
    96
  • Linux sleep命令[通俗易懂]

    Linux sleep命令[通俗易懂]Linuxsleep命令可以用来将目前动作延迟一段时间。使用权限:所有使用者。语法参数说明:–help:显示辅助讯息–version:显示版本编号number:时间长度,

    2022年7月1日
    20
  • RestTemplate的编码格式改为UTF-8,防止乱码[通俗易懂]

    RestTemplate的编码格式改为UTF-8,防止乱码[通俗易懂]我是在调用微信的API的时候发现微信给我返回的用户数据不能够正常显示昵称,昵称都是乱码。//修改RestTemplate的编码格式为UTF-8RestTemplaterestTemplate=newRestTemplate();List<HttpMessageConverter<?>>httpMessageConverters=restTemplate.getMessageConverters();httpMe

    2022年7月14日
    20
  • ant 编译java(java是干啥的)

    1.什么是antant是构建工具2.什么是构建概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个3.ant的好处跨平台–因为ant是使用java实现的,所以它跨平台使用简单–与ant的兄弟make比起来语法清晰–同样是和make相比功能强大–ant能做的事情很多,可能你用了很久,你仍然不知道它能有多少功能。当你自己开发…

    2022年4月11日
    47
  • systick的使用方法_cleardevice函数

    systick的使用方法_cleardevice函数systick的原理前一篇博文有介绍,简而言之就是SysTick定时器是一个24位的倒计数,当倒计数为0时,将从RELOAD寄存器中取值作为定时器的初始值,同时可以选择在这个时候产生中断(异常号:15

    2022年8月6日
    3
  • IDEA 2022 激活码_最新在线免费激活

    (IDEA 2022 激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html00…

    2022年3月30日
    154

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号