題目:乙個一元多項式可以看作由若干個一元單項式按降冪排列成的線性表。請編寫程式對輸入的兩個一元多項式求和,並輸出求和的結果。輸入為兩個一元多項式,每個一元多項式輸入一行,按照降冪依次輸入每個單項式的係數和指數,並以**-1 -1**作為結束。係數和指數均為整數,指數不小於0。輸出為求和結果多項式,按照降冪依次輸出每個單項的係數和指數,每個數值後面用乙個空格隔開,輸出結果多項式後換行。 係數為0的單項式不得輸出——除非結果多項式就是0,則直接輸出0。
for example:
輸入:2 7 3 5 12 1 6 0 -1 -1
7 5 9 4 3 0 -1 -1
輸出:2 7 10 5 9 4 12 1 9 0
首先1.多項式結構體的定義
struct
linklist
;typedef linklist* link;
2.一些基本函式的定義
void
initiallinklist
(link& t)
//初始鍊錶的函式
int
get_length
(link& t)
//獲取鍊錶長度的函式
return num;
}
void
inputlinklist
(link& t)
//建立鍊錶輸入資料的函式
}
void
calcu
(link& t1,link& t2)
else
if(p1->next->expo < p2->expo)
//如果p1的指數小於p2,則進行插入
//每次如果進行插入或者是進行相加的操作p2指標後移
p1 = p1->next;
//p1指標也後移}if
(p2 !=
null
)//如果遍歷完p1的同時p2沒有遍歷完
//就要把p2之後的結點直接插入到p1之後
p1->next = p2;
}
輸出函式(卡了我很久的地方!!!!!)
void
printlinklist
(link& t)
while
(p !=
null
) p = p->next;
}//至於為什麼要設定flag呢?
//我們可以看到本人寫得函式,如果p為空,即鍊錶為空,即輸出零
//但是這是有缺陷的,因為如果鍊錶不為空,但是鍊錶中的係數全為零
//程式就沒有輸出了,所以要用flag做乙個標誌,用來標誌程式是否有輸出
//或者鍊錶中是否有係數不為零的結點!
if(flag)
cout <<
"0";
}
主函式(很簡單):
int
main()
else
}
感想:
因為多項式的加法有很多種情況:1.儲存多項式的鍊錶為空 2.鍊錶不為空,但是係數全為零 3.係數不為零
所以寫程式的時候一定要考慮清楚!
二更:經過一學期的歷練,又碰到這個題了,這次寫了個優化版的,注釋我就不寫了,應該是通俗易懂的!
#
include
#include
using
namespace std;
struct
poly
;typedef poly* pol;
void
create_link
(int num, pol& head)
}pol merge
(int m,
int n,pol head1, pol head2)
else
if(ptr1->exponent < ptr2->exponent)
else
ptr->next = temp;
ptr = ptr->next;
}while
(ptr1)
while
(ptr2)
cout << num ;
return head;
}void
show
(pol head )
else
ptr = ptr->next;}}
intmain()
C 鍊錶實現多項式加法
include include typedef struct polynode polynode,polylist 初始化多項式 bool initpoly polylist poly 二級指標 外插法建立一元多項式單鏈表,n代表多項式非零係數的個數 void polycreate polylist...
鍊錶的多項式加法鍊錶的多項式加法
老師給的模板看的我不要不要的,真心難看,看了很久才把過載加法搞定了。include using namespace std include 定義結點類 用於表示多項式的一項 class node node int nexp,int ncoef private int exp 指數 int coef ...
多項式加法 C 實現
資料結構的選擇 多項式的加法和乘法運算中大量涉及到資料的插入和刪除操作,所以選用鍊錶作為儲存結構。鍊錶的每個項節點有三個域,分別是係數c 指數e和指向下一結點的指標域next。首先定義項節點term class term term term int c,int e term term int c,i...