数据结构实验之栈与队列二:一般算术表达式转换成后缀式

42 篇文章 0 订阅
32 篇文章 0 订阅
Problem Description
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。

Input
输入一个算术表达式,以‘#’字符作为结束标志。

Output
输出该表达式转换所得到的后缀式。

Sample Input
a*b+(c-d/e)*f#
Sample Output
ab*cde/-f*+
思路:(一)、'('这个单独判断。不管栈是不是空栈,也就是说没有限制条件,都直接入栈。
	(二)、如果上来就是空栈,那么所有的运算符'+'、'-'、'*'、'/'.都可以入栈。
	(三)、如何不是空栈,又遇到运算符,那么就一直出栈,直到遇到比自己优先级低的、或者遇到'(',再或
	者栈内元素全部出栈时,停止出栈,再将该运算符入栈。
	(四)、如果是其他的非运算符,直接输出即可。
	(五)、如果遇到')',就一直出栈,直到栈顶元素为'('为止,并且将'('直接抛弃掉。
	(六)、最后一定不要忘记把栈内的元素全部输出出来。一个while循环就行。
AC代码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stack>
using namespace std;
int main()
{
    stack<char>st;
    char ch;
    while(scanf("%c",&ch)&&ch!='#')
    {
        if((ch=='+'||ch=='-'||ch=='*'||ch=='/')&&st.empty())
            st.push(ch);
        else if(ch=='(')
            st.push(ch);
        else if((ch=='+'||ch=='-')&&!st.empty())
        {
            while(!st.empty()&&st.top()!='(')
            {
                printf("%c",st.top());
                st.pop();
            }
            st.push(ch);
        }
        else if((ch=='*'||ch=='/')&&!st.empty())
        {
            while(!st.empty()&&st.top()!='('&&st.top()!='+'&&st.top()!='-')
            {
                printf("%c",st.top());
                st.pop();
            }
            st.push(ch);
        }
        else if(ch==')')
        {
            while(st.top()!='(')
            {
                printf("%c",st.top());
                st.pop();
            }
            st.pop();
        }
        else
        {
            printf("%c",ch);
        }
    }
    while(!st.empty())
    {
        printf("%c",st.top());
        st.pop();
    }
    printf("\n");
    return 0;
}

今天重新刷了一遍有错了!!在这里在强调一下,当栈内的操作符号大于等于要入栈的操作符的时候都要出栈,我当时没有考虑到相等的情况,但是样例过了,一直找不到错误,不得已重新看了自己以前写的这份答案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值