使用棧進行基礎的表示式計算

2021-09-28 22:00:09 字數 1364 閱讀 5224

1.使用乙個數字棧乙個符號棧;

2.通過乙個index值遍歷表示式;

3.如發現是數字,就直接放入數字棧;

4.如發現是符號,進行優先順序比較,如果當前的操作符的優先順序小於或者等於棧頂的操作符,就需要從數字棧中pop兩個數字,從符號棧中pop乙個符號進行計算,將得到的結果放入數字棧,將當前的符號放入符號棧,如果操作符優先順序大於棧頂的操作符,則直接入符號棧;

5.當表示式掃瞄完畢,就順序的從數棧和符號中pop出相應的數字和符號進行運算

6.最後數字棧只有乙個數字,即為所求結果

在迴圈裡面考慮多位數

棧的結構

package com.company;

public class arraystack

public boolean isfull()

public boolean isempty()

//入棧

public void push(int value)

top++;

stack[top]=value;

}//出棧

public int pop()

int value = stack[top];

top--;

return value;

}public void list()

for(int i=top;i>=0;i--)

}//確定優先順序

public int priority(int ope)else if(ope=='+'||ope=='-')else

}public int peek()

//判斷是否為運算子

public boolean isope(char value)

//計算方法

public int cal(int n1,int n2,int ope)

return res;

}}

計算邏輯
package com.company;

public class main else

} else

}else else }}

index++;

if(index>=expression.length())

}while (true)

n1=numstack.pop();

n2=numstack.pop();

ope=opestack.pop();

res = numstack.cal(n1,n2,ope);

numstack.push(res);

}system.out.printf("表示式%s = %d",expression,numstack.pop());

}}

使用棧計算中綴表示式

這裡只能用於計算十以內的表示式 內容 運用棧對中綴表示式求值 include include include define maxsize 100 char oper maxsize 操作符棧 int topoper 1 棧頂指標 int nums maxsize 數字棧 int topnums 1...

計算表示式 棧

問題 現在有乙個合法的二進位制表示式,請計算出該表示式的值 input 輸入一行字串,表示乙個二進位制表示式。長度不超過 100,000 ouput 輸出表示式的值 input output 0 1 0 1 1 0 1 1 兩種方法 1 被動 遇到右括號再進行運算,直至左括號 include inc...

使用棧完成表示式的計算

使用棧完成表示式的計算思路 1 通過乙個index值,來遍歷我們的表示式 2 如果我們發現是乙個數字,就直接入數棧 3 如果掃瞄到的是乙個符號,就分如下情況 3.1 如果發現當前的符號棧為空,就直接入棧 3.2 如果符號棧有操作符,就進行比較,如果當前的操作符的優先順序小於或者 等於棧中的操作符,就...