欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

中缀表达式转后缀表达式

程序员文章站 2022-06-03 16:00:02
...

中缀表达式转后缀表达式

#include<bits/stdc++.h>
using namespace std;
char a[305];
typedef struct node
{
    char a;
    struct node *next;
}node,*link;
int cmp(char i)
{
    if(i=='+'||i=='-') return 1;
    else if(i=='*'||i=='/') return 2;
    else if(i=='('||i==')') return 0;
    return -1;
}
void Push(link &L,char i)
{
    link t=new node;
    t->a=i;
    t->next=L;
    L=t;
}
void Pop(link &L)
{
    link p=L;
    L=L->next;
    delete p;
}
int main()
{
    link L=new node;
    L=NULL;
    Push(L,'#');
    scanf("%s",a);
    for(int i=0;a[i]!='\0';i++)
    {
        if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
        {
            printf("%c",a[i]);
            continue;
        }
        if(L->a=='#'||a[i]=='(') Push(L,a[i]);
        else if(a[i]==')')
        {
            while(L->a!='(')
            {
                printf("%c",L->a);
                Pop(L);
            }
            Pop(L);
        }
        else
        {
            while(cmp(L->a)>=cmp(a[i]))
            {
                printf("%c",L->a);
                Pop(L);
            }
            Push(L,a[i]);
        }
    }
    while(L->a!='#')
    {
        if(L->a!='('&&L->a!=')') printf("%c",L->a);
        Pop(L);
    }
    printf("\n");
}
相关标签: 栈的应用