后缀表达式求解

上面说了中缀表达式转后缀表达式 ,下面我来实现一个电脑识别后缀表达式求解

#include"liststack.h"//引用已写好的栈文件

#include<string>

using namespace std;



typedef struct PERSON

{

    Linknode node;

    int index;

}Person;



//判断数字

int JudgeNum(char c)

{

    return c >= '0' && c <= ' 9';

}

//判断左括号

int JudgeLeft(char c)

{

    return c == '(';

}

//判断右括号

int JudgeRight(char c)

{

    return c == ')';

}

//判断符号

int JudgeSymbol(char c)

{

    return c == '+' || c == '-' || c == '*' || c == '/';

}



int swith(Person *&per, Person *&per1,char c)

{

    int i;

    switch (c)

    {

    case'+':i = per1->index + per->index; break;

    case'-':i = per1->index - per->index; break;

    case'*':i = per1->index * per->index; break;

    case'/':i = per1->index / per->index; break;

    default:

        break;

    }

    return i;

}



Person* Myper(int i)

{

    Person*per = (Person*)malloc(sizeof(Person));

    per->index =i;

    return per;

}

void main()

{

    LinkStack* stack = Init_LinkStack();//初始化栈

    char*str = "831-5*+"; //8 + (3 - 1) * 5     831-5*+

    char*p = str;

    while (*p != '\0')

    {

        if (JudgeNum(*p))

        {

            Push_LinkStack(stack, (Linknode*)Myper(*p-'0'));

        }

        if (JudgeSymbol(*p))

        {

                Person *per = (Person*)Top_LinkStack(stack);

                Pop_LinkStackSe(stack);

                Person *per1 = (Person*)Top_LinkStack(stack);

                Pop_LinkStackSe(stack);

                int i = swith(per,per1,*p);

                Push_LinkStack(stack, (Linknode*)Myper(i));

        }

        p++;

    }

    Person *per = (Person*)Top_LinkStack(stack);

    cout << per->index << endl;

    Pop_LinkStackSe(stack);

    FreeSplace_LinkStack(stack);

}

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值