【数据结构】栈实现计算器
1.用栈实现计算器:
public class test {
public static void main(String[] args) {
String e = "70+2*6-4";
Stack num = new Stack(10);
Stack operate = new Stack(5);
int index = 0;
int num1 = 0;
int num2 = 0;
int oper = 0;
int res = 0;
char ch = ;
String keepNum = "";
while (true){
ch = e.substring(index,index+1).charAt(0);
if (num.isOper(ch)){
if (operate.isEmpty()){
operate.push(ch);
}
else{
if (num.caprty(ch)<=num.caprty(operate.getTop())){
num1 = num.pop();
num2 = num.pop();
oper = operate.pop();
res = num.cault(num2,num1,oper);
num.push(res);
operate.push(ch);
}
else{
operate.push(ch);
}
}
}else{
keepNum+=ch;
if (index==e.length()-1){
num.push(Integer.parseInt(keepNum));
}else{
if (num.isOper(e.substring(index+1,index+2).charAt(0))){
num.push(Integer.parseInt(keepNum));
keepNum = "";
}
}}
index++;
if (index>=e.length()){
break;
}
}
while (true){
if (operate.isEmpty()){
break;
}
num1 = num.pop();
num2 = num.pop();
oper = operate.pop();
res = num.cault(num2,num1,oper);
num.push(res);
}
System.out.println(e+"="+num.pop());
}
}
class Stack{
private int maxSize;
private int[] stack;
private int top = -1;
public Stack(int maxSize) {
this.maxSize = maxSize;
stack = new int[maxSize];
}
public boolean isFull(){
return top == maxSize-1;
}
public boolean isEmpty(){
return top == -1;
}
public int getTop(){
return stack[top];
}
public void push(int e){
if (isFull()){
System.out.println("满了");
return;
}
top++;
stack[top] = e;
}
public int pop(){
if (isEmpty()){
throw new RuntimeException("栈为空");
}
int value = stack[top];
top--;
return value;
}
public void list(){
if (isEmpty()){
System.out.println("空");
return;
}
for (int i=top; i>=0;i--){
System.out.println(stack[i]);
}
}
public int caprty(int oper){
if (oper==*||oper==/){
return 1;
}
if (oper==+||oper==-){
return 0;
}
return -1;
}
public boolean isOper(char oper){
return oper==*||oper==/||oper==+||oper==-;
}
public int cault(int num,int num1,int oper){
int res = 0;
switch (oper){
case +:
res = num + num1;
break;
case -:
res = num - num1;
break;
case *:
res = num * num1;
break;
case /:
res = num / num1;
break;
default:
break;
}
return res;
}
}
下一篇:
C语言九九乘法表(五种输出形式)
