首页 > 其他分享 >栈5-后缀表达式求解

栈5-后缀表达式求解

时间:2024-04-18 20:33:07浏览次数:27  
标签:LinkStack rightNum 求解 后缀 int leftNum MyNum stack 表达式

栈5-后缀表达式的求解


求解过程

8 3 1 - 5 * +

数字:进栈 [1,3,8]

符号: -

从栈中弹出右操作数 -1

从栈中弹出左操作数 3-1

根据符号进行运算 2

将运算结果压入栈中 [2,8]

遍历结束, 栈中唯一的数字作为计算结果


定义栈结构

typedef struct MYNUM{
    LinkNode node;
    int val;
} MyNum;

判断数字

int isNumber(char c){
    return c>='0' && c<='9';
}

运算符号操作

int operatorOperate(char c,int rightNum, int leftNum){
    if(c=='+') return leftNum+rightNum;
    if(c=='-') return leftNum-rightNum;
    if(c=='*') return leftNum*rightNum;
    if(c=='/') return leftNum/rightNum;
}

测试

int main(){
    char *str = "831-5*+";
    char *p = str;
    //创建栈
    LinkStack *stack = Init_LinkStack();
    //'\0'是字符的末尾
    while(*p!='\0'){
        if(isNumber(*p)){
            MyNum *num = (MyNum*)malloc(sizeof(MyNum));
            num->val = *p-'0';
            Push_LinkStack(stack, (LinkNode*)num);
        }else{
            //弹出右操作数
            int rightNum = ((MyNum*)Top_LinkStack(stack))->val;
            Pop_LinkStack(stack);
            //弹出左操作数 
            int leftNum = ((MyNum*)Top_LinkStack(stack))->val;
            Pop_LinkStack(stack);
            //结果进栈
            MyNum *num = (MyNum*)malloc(sizeof(MyNum));
            num->val = operatorOperate(*p, rightNum, leftNum);
            Push_LinkStack(stack,(LinkNode*)num);
        }
        p++;   
    }

    if(Size_LinkStack(stack)==1){
        MyNum *num1 = (MyNum*)Top_LinkStack(stack);
        cout << str << "的结果是:" << num1->val << endl;
        Pop_LinkStack(stack);
    }

    //释放内存
    FreeSpace_LinkStack(stack);

    system("pause");
    return 0;
}

标签:LinkStack,rightNum,求解,后缀,int,leftNum,MyNum,stack,表达式
From: https://www.cnblogs.com/HIK4RU44/p/18144353

相关文章

  • 开源Python几何约束求解器GeoSolver
    GeoSolver是一个用于几何约束求解的Python包。几何约束问题(GCP)是几何变量上/之间的一组几何约束。问题是找到几何变量的配置以满足所有约束。几何变量是位置、方向、形状、大小等未知的对象。GCP中的变量可以是点、线、平面、球体、圆柱体和更复杂的形状。几何约束是诸如对象......
  • 正则表达式
    1.regexp命令 regexp匹配正则表达式与字符串,它的语法为: regexp?switches?expstring?matchvar??subMatchVar...subMatchVar? regexp命令比较字符串string是否与正则表达式exp部分或者全部匹配,并可以将字符串中的子字符串提取出来。如果字符串的某个子字符......
  • Effective Python:第5条 用辅助函数取代复杂的表达式
    初始代码: 第一次优化:多次使用:  ......
  • 后缀数组学习笔记
    定义后缀数组是什么?(下文用\(Suf_S[i]\)表示\(S[i,i+1,\cdots,|S|]\),对\(Suf_T\)同理。并用\(S[l,r]\)表示\(S[l,l+1,\cdots,r]\),对\(T[l,r]\)同理)后缀数组包含两个数组\(rk,sa\)。\(rk[i]\)表示后缀\(Suf_S[i]\)排序后的排名。\(sa[i]\)表示排......
  • 正则表达式
    Python正则表达式Python正则表达式是一种用来匹配和处理字符串的强大工具。Python提供了re模块来支持正则表达式的使用。re模块常用函数re.compile(pattern,flags=0):根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配......
  • 后缀数组学习笔记
    定义后缀从字符串某个位置i到字符串末尾的子串,定义s的第i个字符为第一个元素的后缀为suf(i)。后缀数组把s的每一个后缀按照字典序排序,后缀数组sa[i]表示排名为i的后缀的起始位置的下标。rk[i]数组代表起始位置为i的后缀的排名。rk[]和sa[]是一一对应关系,互为逆运算,可以相互......
  • 24点求解器
    \(24\)点求解器,输出任意一组解。#include<bits/stdc++.h>usingnamespacestd;#defineto_stto_string#defineinpush_backtypedefdoubledb;typedefstringst;vector<pair<db,st>>Number;intA,B,C,D;boolOut;voidOutput(){Out=true;puts(&quo......
  • python3字符串格式化用format()好还是 % 表达式好
    左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。公众号:一点sir,关注领取python编程资料在Python中,使用format()方法是更推荐的方式来进行字符串格式化,特别是在Python3中。虽然%表达式仍然可以在Python中使用,但已经不推荐使用了,新的项目中能不用就不用,谁知道哪......
  • 后缀数组 学习笔记
    理论知识详见OIWiki。模板后缀排序一切有关后缀数组问题的必备板子。求后缀数组模板题,OIWiki有详解。点击查看代码#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'#definesortstable_sortusingnamespacestd;constintN=1e6+10;template......
  • python基础-函数(lambda表达式、函数作参数、内置函数、推导式)和pip
    函数进阶今日概要:函数名就是一个变量(扩展)匿名函数(lambda表达式)重点内置函数——python内置函数推导式(一行代码生成数据)1.函数名就是变量deffunc():passv1=funcv1()func()defregister():...deflogin():...def......