多項式求值問題 棧實現

2021-09-09 09:05:06 字數 1691 閱讀 3793

多項式求值問題相信大家都不會陌生,我們日常生活中經常遇見類似的問題,比如 2+1+3*4/(5+5),看起來好像挺簡單的,但是如何用程式設計實現呢?如何讓計算機幫我們實現呢?這就是我們今天要討論的問題——多項式求值(中綴式求值)。

解題思路:

1.我們要用兩個棧來實現多項式求值問題。

<1>.第乙個棧用來儲存運算元。

<2>.第二個棧用來儲存操作符。

2.如何實現。

<1>.讀入我們的表示式。

<2>.遍歷表示式的各個項,並確定當前項是運算子還是運算元。

<3>.如果是運算元,直接壓入運算元棧。

<4>.如果是操作符,則分為兩種:

.如果當前操作符的優先順序大於操作符棧頂操作符的優先順序,則將當前操作符壓入操作符棧。繼續遍歷。

.如果當前操作符的優先順序小於操作符棧頂操作符的優先順序,則彈出操作符棧棧頂的操作符,並同時彈出兩個運算元,進行運算後,將結果壓入運算元棧,繼續比較操作符棧棧頂操作符與當前操作符的優先順序關係。。。

<5>.當表示式被全部遍歷完畢後,開始退棧,就是每次從操作符棧彈出乙個操作符,從運算元棧彈出兩個運算元,進行運算後將運算結果壓入運算元棧,左後操作符棧空時,運算元棧棧底的元素就是表示式的運算結果。

運算子優先順序表:

**實現:

兩個棧

//運算元棧

private stacknum = new stack<>();

//運算子棧

private stackoperator = new stack<>();

主方法

//表示式求值處理函式

public int operation(listexpression)

/*** 運算操作,運算元棧退兩個數,操作符棧退乙個符號

* 將運算得出的結果再壓入運算元棧的棧頂

*/private int clac() else if(sign.equals("-")) else if(sign.equals("*")) else if(sign.equals("/"))

num.push(result);

return result;

} /**

* 通過判斷運算子的優先順序關係,確定下一步操作

* @param flag

*/private void judge(string flag)

system.out.println("執行完成!");

}else if(operator_cmp.cmp(flag,operator.peek())==0) else if(operator_cmp.cmp(flag,operator.peek())==1) else if(operator_cmp.cmp(flag,operator.peek())==-1) }

//將表示式字串轉換成表示式中的每一項所組成的陣列

private listgetexpressionarr(string expression)

謝謝觀賞!

多項式求值

例2 8 多項式求值 考察多項式p x n cix i i 0 如果cn 0,則p 是乙個n 維多項式。下面程式可用來計算對於給定的值x,p x 的實際取值。假定根據f o r迴圈內部所執行的加和乘的次數來估算時間複雜性。可以使用維數n 作為例項特徵。進入f o r迴圈的總次數為n,每次迴圈執行1次...

多項式求值

題目描述 學了數論後,小傑最近對整係數多項式在整點的取值感興趣,他現在來求助你幫他計算。乙個整係數多項式通常表示為f x a0 a1x a2x2 a3x3 anxn,其中ai i 0,1,2,n 為整數。給定x z,求出f x mod1000000007。輸入描述 多組讀入。每組的第一行,表示多項式...

多項式求值

輸入的第一行為乙個整數 m m 1 leq m 181 m 18 表示多項式共有 m m 項。之後輸入 m m 行,每行有兩個元素,分別表示多項式各項的係數 c c 與次數 e e 1 leq c i 1001 ci 10 0,1 leq n 251 n 25 最後一行為待求多項式的變數值 x 0x...