使用棧結構計算中綴表示式

2022-06-17 18:06:10 字數 2300 閱讀 6335

棧中元素的順序是先進後出,新增的元素總在棧頂,出棧也是先出棧頂,就像彈夾一樣。

中綴表示式是我們人計算表示式的方式例如 (2*3-2)*(3+3*3)我們總會括號優先,* / 優先於+ -

使用棧結構計算這個表示式的核心思想就是搞兩個棧,乙個存放數字,乙個存放符號。

package

com.dfsn.cloud.eureka;

public

class stack

public

void

push(t t)

top++;

arr[top] =t;

}public

t pop()

return (t) arr[top--];

}public

t peek()

return

(t) arr[top];

}public

boolean

isempty()

public

boolean

isfull()

public

void

show()

}public

intsize()

}

view code

package

com.dfsn.cloud.eureka;

//中綴表示式

public

class

nifixexpression

else

else

//如果是右括號,則需要每次彈出乙個符號和兩個數字做運算

//直到碰到 ( 符號結束,並把 ( 出棧

if (current.equals(")"))

else

}continue

; }

//拿出符號棧頂元素和當前符號對比,如果棧頂符號是 ( 則為0,因為它只有遇到)才有意義

string stacktop =symbolstack.peek();

int stacktoppriority =priority(stacktop);

int priority =priority(current);

//如果當前符號優先順序大於棧頂符號優先順序,將當前符號新增到棧頂

if (priority >stacktoppriority)

else}}

}//最後兩個佇列可能還有元素,則順序彈出1個符號和兩個數字做運算,並且將結果入數字棧

while (true

) else

}if (numberstack.size() != 1)

else

}//返回1表示是運算子,返回0表示是數字

public

intsymbolornumber(string expression)

else

if (expression.equals("0") || expression.equals("1") || expression.equals("2") || expression.equals("3")

|| expression.equals("4") || expression.equals("5") || expression.equals("6") || expression.equals("7")

|| expression.equals("8") || expression.equals("9"))

else

}//返回運算子的等級 * / 高

public

intpriority(string symbol)

else

if (symbol.equals("*") || symbol.equals("/"))

else

if (symbol.equals("("))

else

}//獲取字串中第乙個連續數字

public

intconcatnumber(string str)

string ch = str.charat(index) + "";

if (symbolornumber(ch) == 0)

else

}return

integer.parseint(strnumber.tostring());

}//做運算

public

int operation(int number1, int

number2, string symbol) }}

view code

使用棧計算中綴表示式

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

計算中綴表示式

計算中綴表示式 可以稱得上是乙個特別經典的關於棧的演算法題,幾乎在所有資料結構教材中都會涉及,而且很多公司面試或者筆試的時候都會把這道題作為乙個考察點。可以說,這是一道必須要掌握的演算法題。中綴表示式 字尾表示式等概念在這裡就不贅述了,讓我們直奔主題。題目 輸入乙個中綴表示式,計算其結果。輸入的前提...

中綴表示式計算

雙棧法 數字棧和運算子棧 1.從前向後遇見數字就壓入數字棧 2.遇見左括號壓棧 3.遇見右括號則彈出數字棧頂兩個數字,和乙個運算子棧乙個運算子進行計算,直至遇見左括號,退括號,計算結果壓棧 4.遇見運算子,若符號棧頂的元素小於當前運算子優先順序,則入棧 若相等或大於則數字彈出倆,符號彈出乙個計算,直...