ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SWUST OJ 1042: 中缀表达式转换为后缀表达式

2022-01-06 09:02:29  阅读:177  来源: 互联网

标签:1042 ch 中缀 int top char 表达式 struct


题目描述

中缀表达式是一个通用的算术或逻辑公式表示方法,操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法。后缀表达式不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:(2 + 1) * 3 , 即2 1 + 3 *。利用栈结构,将中缀表达式转换为后缀表达式。(测试数据元素为单个字符)

输入

中缀表达式

输出

后缀表达式

样例输入

A+(B-C/D)*E

样例输出

ABCD/-E*+

参考程序

#include<stdio.h>
#include<stdlib.h>
struct stack
{
    char date[222];
    int top;
};
struct NODE
{
    char exp;
    int pri;
}lpri[]={{'=',0},{'+',3},{'-',3},{'*',5},{'/',5},{'(',1},{')',6}},
rpri[]={{'=',0},{'+',2},{'-',2},{'*',4},{'/',4},{'(',6},{')',1}};
char e;
void push(struct stack *s,char c)
{
    s->top++;
    s->date[s->top]=c;
}
void pop(struct stack *s)
{
    e=s->date[s->top];
    s->top--;
}
int right(char c)
{
    int i;
    for(i=0;i<7;i++)
    {
        if(rpri[i].exp==c)
            return  rpri[i].pri;
    }
}
int left(char c)
{
    int i;
    for(i=0;i<7;i++)
    {
        if(lpri[i].exp==c)
            return  lpri[i].pri;
    }
}
int main()
{
    char ch[222],num[222];;
    int k=0;
    struct stack *s;
    s=(struct stack *)malloc(sizeof(struct stack));
    s->top=-1;
    scanf("%s",ch);
    int i=0;
    push(s,'=');
    for(i=0;ch[i]!='\0';i++)
    {
        if(ch[i]>='A'&&ch[i]<='Z')
        {
            num[k]=ch[i];
            k++;
        }
        else
        {
            if(right(ch[i])>left(s->date[s->top]))
                push(s,ch[i]);
            else if(right(ch[i])<left(s->date[s->top]))
            {
                pop(s);
                num[k]=e;
                k++;
                i--;
                 
            }
            else
                pop(s);
        }
    }
    while(s->top!=0)
    {
        pop(s);
        num[k]=e;
        k++;
    }
    for(i=0;i<k;i++)
        printf("%c",num[i]);
    return 0;
}

注意

该程序仅供学习参考!

标签:1042,ch,中缀,int,top,char,表达式,struct
来源: https://blog.csdn.net/qq_29711355/article/details/122310875

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有