資料結構 鏈式佇列的應用之多項式運算

2021-10-05 07:49:58 字數 3437 閱讀 8073

/是資料結構課作業,用老師的話說就是造輪子的一道題,記錄一下/

(多項式的運算)請編寫程式實現多項式的加法、減法、乘法的運算。

輸入】第一行運算子c(c可能為+,-, *)

第二行,運算子c的第乙個多項式且按照指數的降序排列

第三行,運算子c的第二個多項式且按照指數的降序排列

其中,輸入多項式每一項的係數與指數均為整數,指數非負且係數不為0。

輸出】多項式運算後的結果。用 ^ 表示指數項。

例如

【輸入】

*x^2-3x+1

x^3【輸出】

x^5-3x^4+x^3

【輸入】

+x^2-3x+1

x^3【輸出】

x^3+x^2-3x+1

【思路】

首先考慮輸入,先按照字串輸入,從每乙個運算子開始向後討論每一項,先確定符號(+ or -),然後確定係數(1 or >1),最後確定指數(0 or >0),最後將每一項的係數和質數壓進佇列。

對於加法,先判斷指數是否相同,指數相同則係數相加,把結果的係數和指數放進輸出佇列,把兩個項從原佇列中丟擲。如果指數不同,則把指數大的一項放進輸出佇列,並把該項從原佇列丟擲。一直操作到加數和被加數佇列都空。如果有乙個空了而另乙個沒空,則將空佇列按0處理即可。

對於減法,只要把減數的係數乘以-1,然後仍然按照加法計算。

對於乘法,進行模擬,先宣告乙個佇列 temps,將乘數的佇列賦值給temps,避免乘數的資料被改變。然後每次提取被乘數中一項,用它乘以temps中的每一項,並將結果放進臨時結果佇列 tempr,最後將 tempr 加給輸出佇列res。直到被乘數隊列為空。

最後輸出,依然是分情況討論。

【ac**】

#include

#include

#include

#include

using

namespace std;

typedef

int target;

#define maxsize 100

enum error_code

;struct node

;node::

node()

node::

node

(target item1,target item2,node* new_come)

class

queue

;queue::

queue

(const queue &original)

else}}

void queue::

operator=(

const queue &original)

else

original_node=original.rear;

new_rear=

newnode

(original_node-

>coef,original_node-

>exp)

; new_rear-

>next=

null;}

while(!

is_empty()

)serve()

; front=new_front;

rear=new_rear;

}queue::

queue()

bool queue::

is_empty()

const

error_code queue::

(const target &item1,

const target &item2)

node* p=

newnode

(item1,item2);if

(p==

null

)return overflow;

rear-

>next=p;

rear=p;

return success;

}error_code queue::

serve()

error_code queue::

getcoef

(target &item)

const

error_code queue::

getexp

(target &item)

const

error_code queue::

clear()

queue::

~queue()

void

input

(char s[

],queue &item)

else

if(s[i]

=='-')if

(s[i]

=='x')}

else

item.

(sign*ceof,exp)

;continue;}

else

if(s[i]

>=

'0'&&s[i]

<=

'9')

if(s[i]

=='x')}

else

item.

(sign*ceof,exp)

;continue;}

else}}

}void

printx

(queue res)

} queue add

(queue add,queue sum)

else

if(exps>expa)

else

else}}

if(add.

is_empty()

&&!sum.

is_empty()

)}elseif(

!add.

is_empty()

&&sum.

is_empty()

)}return res;

}queue sub

(queue add1,queue sum1)

res=

add(add1,temp)

;return res;

}queue mult

(queue addt,queue sumt)

res=

add(res,tempr)

; addt.

serve()

;}return res;

}int

main()

【小結】

這個**的封裝性還差一些,每一項的係數和內容可以再封裝成target。

開始做的時候難點主要是輸入的資訊處理,挺難受的。

而且一開始拷貝建構函式和符號過載不是很熟,出了點小問題,卡手。

資料結構之多項式(C )

資料結構多項式,運用到類的複製建構函式,靜態成員等基礎知識,簡單實現了加法和乘法運算,但是對乘法 複雜度比較高 暫時做這樣處理。對於多項式的構成這些不做多餘介紹。本 純手工製作,難免有不足之處。標頭檔案 polynomial h ifndef polynomial h define polynomi...

資料結構之多項式相加

問題描述 編寫乙個程式用單鏈表儲存多項式,並實現兩個一元多項式a與b相加的函式。a,b剛開始是無序的,a與b之和按降序排列。例如 多項式a 1.2x 0 2.5x 1 3.2x 3 2.5x 5 多項式b 1.2x 0 2.5x 1 3.2x 3 2.5x 5 5.4x 10 多項式a與b之和 5....

一元多項式 鏈式實現 資料結構

用帶頭結點的鏈式表來表示多項式,每個結點對應多項式的一項 資料結構 標誌指數域 exp係數域 coef 指標域next typedef struct node polynode 如果相等,則把係數相加 如果不等的話,取較小的放在c後面 while p1 p2 else if p1 exp p2 ex...