多項式的簡單運算(棧和佇列的應用)

2021-10-04 08:59:18 字數 3630 閱讀 5635

思路:

首先要考慮儲存多項式,只需存它每一項的係數和指數,用佇列來儲存比較方便,所以需要呼叫之前的鍊錶隊

列,將每一項的指數和係數當做乙個資料存入佇列。然後簡單的加減乘除運算可以套用計算器(棧的應用),

只需將stack_entry型別換為多項式即可。

**要求:**運算的多項式必須按未知數指數從大到小排列。

**多項式加法:**對比兩個多項式的指數,指數相同的係數相加。

**多項式減法:**對比兩個多項式的指數,指數相同的係數相減。

**多項式乘法:**將乙個多項式拆開,讓其每一項都與另乙個多項式相乘,最後所有結果相加。

多項式除法:

需要遞迴,將被除數首項和除數首項取出相除,結果記為一部分商,餘數繼續取出首 項和除數首項相除,將結果與前面求出的部分商相加,以此迴圈,直到餘數小於除數。

說明:

**:term.h

struct term 

;term::

term

(int exponent,

double scalar)

//建構函式

polynomial.cpp

#include

"term.h"

typedef term nodequeue_entry;

typedef nodequeue_entry queue_entry;

#include

"chainqueue.cpp"

class

polynomial

:private extended_queue

;void polynomial::

mult_term

(polynomial p, term t)

//求多項式與一項的乘積

}void polynomial::

print()

const

//列印

else

if(print_term.coefficient <

0) cout <<

" - "

;else cout <<

" + "

;//列印各項之間的符號

double r =

(print_term.coefficient >=0)

? print_term.coefficient :

-(print_term.coefficient);if

(r !=

1) cout << r;

//列印係數

if(print_term.degree >

1) cout <<

" x^"

<< print_term.degree;

if(print_term.degree ==

1) cout <<

" x"

;//列印指數部分

if(r ==

1&& print_term.degree ==

0) cout <<

" 1"

; print_node = print_node-

>next;

//遍歷}if

(first_term)

cout <<

"0";

cout << endl;

}void polynomial::

read()

//讀取

else

last_exponent = exponent;}}

while

(coefficient !=

0.0&& exponent !=0)

;}void polynomial::

equals_sum

(polynomial p, polynomial q)

//加法

//如果p的首項指數大於q的首項指數則讀出並刪除p的首項,將結果存入p_term中

else

if(q.

degree()

> p.

degree()

)//如果q的首項指數大於p的首項指數則讀出並刪除q的首項,將結果存入q_term中

else}}

}void polynomial::

equals_difference

(polynomial p, polynomial q)

//減法

//如果p的首項指數大於q的首項指數則讀出並刪除p的首項,將結果存入p_term中

else

if(q.

degree()

> p.

degree()

)//如果q的首項指數大於p的首項指數則讀出並刪除q的首項,將q指數的相反數存入q_term中

else}}

}void polynomial::

equals_product

(polynomial p, polynomial q)

//乘法

while

(new_sum.

serve_and_retrieve

(term)

== success)

(term)

;//遍歷完後,將結果存入鍊錶

}error_code polynomial::

equals_quotient

(polynomial p, polynomial q)

//除法

int polynomial::

degree()

const

//讀取首項的指數

main.cpp

#include

"polynomial.cpp"

typedef polynomial stack_entry;

#include

"stack.cpp"

void

introduction()

//說明程式作用

void

instructions()

//說明輸入規則

char

get_command()

//檢測輸入的字元是否有效

}return command;

}bool

do_command

(char command, stack &stored_polynomials)

break

;case

'+':

if(stored_polynomials.

empty()

) cout <<

"stack empty"

<< endl;

else

else

}break

;case

'q':

cout <<

"calculation finished."

<< endl;

return

false;}

return

true;}

intmain()

多項式簡單應用

求 displaystyle sum na i cdot b i 對於求 displaystyle sum na i cdot b i 把b陣列翻轉一下,等價於求 displaystyle sum na i cdot b 這不就是乙個卷積嘛,時間複雜度 theta nlog n 你可能會說時間複雜度...

多項式的表示和運算

多項式的關鍵資料 compare函式,比較p1和p2的指數大小,p1大返回1,p2大返回 1,相等返回0 attach函式 將計算結果複製到結果多項式 n為多項式的項數 完整 加法 乘法 include typedef struct node pnode struct node 將一項加入鍊錶,尾插...

多項式的冪運算

在寫 過程中發現字元陣列轉字串用.tostring 方法會亂碼,可以用string.valueof argsp 或者用array.tostring args 冪的運算時由於用的是string會出現空間浪費現象,可以用stringbuffer類替換,但是由於計算量不大,所以就沒有改了 package ...