逆波兰表达式(此篇文章加上上篇栈文章,即可完美实现内容)


void algorithm(STACK* stack, char* num)
{
    if (strcmp(num, "+") == 0)
    {
        int n = 0, m = 0;
        n = top(*stack)->index;
        pop(stack);
        m = top(*stack)->index;
        pop(stack);
        int i = m+n;
        insert(stack, i);

    }
    else if (strcmp(num, "-") == 0)
    {
        int n = 0, m = 0;
        n = top(*stack)->index;
        pop(stack);
        m = top(*stack)->index;
        pop(stack);
        int i = n-m;
        insert(stack, i);


    }
    else if (strcmp(num, "*") == 0)
    {
        int n = 0, m = 0;
        n = top(*stack)->index;
        pop(stack);
        m = top(*stack)->index;
        pop(stack);
        int i = m*n;
        insert(stack, i);

    }
    else if (strcmp(num, "/") == 0)
    {
        int n = 0, m = 0;
        n = top(*stack)->index;
        pop(stack);
        m = top(*stack)->index;
        pop(stack);
        int i =n/m;
        insert(stack, i);


    }



}

void find(STACK* stack, char* num)
{
    char*p = NULL;
    char number[8] = { 0 };
    int n = 0;
    if (strlen(num)!=0)
    {

        p = strstr(num, ",");
        n = p - num;
        memcpy(number, num, n);
        if (number[0] >= '!' &&number[0] <= '/')
        {
            algorithm(stack,number);
        }
        else
        {
            int m = atoi(number);
            insert(stack, m);
        }
        strcpy(num, p + 1);

        find(stack, num);
    }
    return;
}



void main()
{

    STACK stack = { 0 };
    char a[10] = { 0 };
    int index = 0;
    printf("请输入即将要计算的内容,以逗号间隔,enter结束");
    gets(a);

    find(&stack, a);
    printf("结果是以下内容");
    show(stack);
    getchar();

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值