栈用于计算器存在的一些问题

120 阅读1分钟

栈是个很特殊的数据结构,涉及到数值计算问题,而且过程很复杂,并且概念上和传统的栈内存有区别,使用感觉也不太流畅,类基本不会复用,性价比不高,但是性质特殊。

  • 栈的特点:先进后出。
  • 栈的用途:数值计算。和栈内存有区别。
栈的数据结构
  • 变量
    • 栈顶:top
    • 计算表达式:expression
    • 用于计算的两个数:number、number
    • 存放计算值:result
    • 存放单一运算符:operator
    • 存放表达式单一符号:ch
    • 表达式末尾验证索引:index
    • 多位数拼接字符串:longNumber
class Main{
    class 栈{
        栈顶:top;
        栈长度:arrayLength;
        栈数组:array=int[];

        运算符栈顶返回函数:back();
        数字栈压入函数:push(num);
        数字栈弹出函数:pop();
        数字计算函数:cal();
        数字类型判断函数:isNumber();
        运算符类型判断函数:isOperate();
        栈空函数:isEmpty;
        栈满函数:isFull;
        运算符优先级设置与返回函数:ladder();
    }
    main(){


        循环{
            每次得到一个char然后进行判断循环:ch=express.substring.charat;
            switch(ch):

            case:isOperator运算符{
                if(运算符栈为空){
                    直接入栈
                }
                else{
                    if(优先级<栈顶运算符&栈顶不是左括号){
                        调用栈对象的运算函数,弹出一个运算符和两个number,将运算结果压入数字栈
                    }
                    elseif(优先级>栈顶运算符){
                        直接压入
                    }
                }
            }

            

            case:number数字{
            获得ch副本:longNumber+=number;
            if(ch内容为表达式最后一位数字:index=expression.length){
                直接入栈
            }else if(ch后一位是运算符:express.substring.charat.isOperator){
                可以入栈,并且清空longNumber
            }else{继续循环}
            }


            每次循环index++;
            if(index>expression.length-1)){
                break跳出,唯一的循环出口};
        }



    }












}