栈是个很特殊的数据结构,涉及到数值计算问题,而且过程很复杂,并且概念上和传统的栈内存有区别,使用感觉也不太流畅,类基本不会复用,性价比不高,但是性质特殊。
- 栈的特点:先进后出。
- 栈的用途:数值计算。和栈内存有区别。
栈的数据结构
- 变量
- 栈顶: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跳出,唯一的循环出口};
}
}
}