棧中元素的順序是先進後出,新增的元素總在棧頂,出棧也是先出棧頂,就像彈夾一樣。
中綴表示式是我們人計算表示式的方式例如 (2*3-2)*(3+3*3)我們總會括號優先,* / 優先於+ -
使用棧結構計算這個表示式的核心思想就是搞兩個棧,乙個存放數字,乙個存放符號。
packageview codecom.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()
}
packageview codecom.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) }}
使用棧計算中綴表示式
這裡只能用於計算十以內的表示式 內容 運用棧對中綴表示式求值 include include include define maxsize 100 char oper maxsize 操作符棧 int topoper 1 棧頂指標 int nums maxsize 數字棧 int topnums 1...
計算中綴表示式
計算中綴表示式 可以稱得上是乙個特別經典的關於棧的演算法題,幾乎在所有資料結構教材中都會涉及,而且很多公司面試或者筆試的時候都會把這道題作為乙個考察點。可以說,這是一道必須要掌握的演算法題。中綴表示式 字尾表示式等概念在這裡就不贅述了,讓我們直奔主題。題目 輸入乙個中綴表示式,計算其結果。輸入的前提...
中綴表示式計算
雙棧法 數字棧和運算子棧 1.從前向後遇見數字就壓入數字棧 2.遇見左括號壓棧 3.遇見右括號則彈出數字棧頂兩個數字,和乙個運算子棧乙個運算子進行計算,直至遇見左括號,退括號,計算結果壓棧 4.遇見運算子,若符號棧頂的元素小於當前運算子優先順序,則入棧 若相等或大於則數字彈出倆,符號彈出乙個計算,直...