/是資料結構課作業,用老師的話說就是造輪子的一道題,記錄一下/
(多項式的運算)請編寫程式實現多項式的加法、減法、乘法的運算。
【輸入】第一行運算子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...