假如說我們現在有下面兩個多項式:
①a(x)=3x2+4x5+5x3-x1
②b(x)=4x3+7x2+3x1
這兩個多項式在計算機中用鍊錶的來儲存
根據多項式相加的運算規則:對兩個多項式中所有指數相同的項,對應係數想加,若其和不為零,則作為「和多項式」中的一項插入到「和多項式」鍊錶中去;對於兩個多項式中指數不相同的項,則將指數較小的項插入到「和多項式」鍊錶中去。「多項式」鍊錶中的節點無需生成,而應該從兩個多項式的鍊錶中摘取。
1.預處理部分
#include using2.結構體namespace
std;
#define ok 1
#define error 0
#define elemtype int
int flag = 1; //
定義乙個標誌變數,來區分輸出的f(x)
鍊錶的每個節點都有三個,係數(data)、指數(index)和乙個指標域(next)。
typedef struct polyn //3.輸出鍊錶定義乙個結構體,包括三個成員變數
polyn,*linklist;
輸出鍊錶是為了便於觀察我們建立的鍊錶,以及後面輸出同型別和的鍊錶。
具體實現:①首先宣告乙個指標指向首元結點
②while,在p不為空的情況下按照多項式的形式輸出節點,並按照係數的正負,分情況輸出
void printf_polyn(linklist l) //4.對鍊錶進行排序輸出鍊錶
else cout
p=p->next; //
指標下移
} cout
<
}
使用選擇排序,對鍊錶每個元素進行排序
具體實現:①定義乙個中間變數,便於後面的資料交換。
②排序時,首先取到第乙個結點的指數,逐個與後面結點的指數比較,第二次用第二個結點的指數與後面結點指數比較,依次類推。
③如果前面的指數比後面的指數大,就交換,這樣比下去即可實現排序
void sort_polyn(linklist &l) //5.建立鍊錶使用選擇法對鍊錶進行排序}}
printf_polyn(l);
//輸出鍊錶
flag++;
}
採用尾插法建立鍊錶。
void creat_polyn(linklist &l) //6.鍊錶的合併尾插法建立鍊錶
else cout<
現在輸入第二個多項式
"<
cout
<
請輸入你要建立的項數:";
cin>>n; //
輸入項數
polyn *p,*r; //
乙個新建節點的指標和乙個尾指標
l = new polyn; //
初始化頭節點
l->next =null;
r =l;
cout
<
請輸入係數和指數(係數和指數之間用空格隔開):";
for(int j = 1;j <= n;j++) //
迴圈n次,每次新建乙個節點
}
基本的思想就是分別先定義兩個指標分別指向兩個鍊錶,至於兩個鍊錶的和,可以新建乙個鍊錶來存放,也可以直接用兩個鍊錶的其中乙個來儲存。我這裡用的la儲存,那麼也需要乙個指標來指向它,就是r。做好這些我們就可以來進行比較了,la中每個結點與lb的每個結點進行比較,會出現三種情況,第一種:la的大於lb,就將la的結點接到r上,然後指la的指標下移。第二種,la的小於lb,就將lb的結點接到r上,然後lb的指標下移。第三種:la等於lb,那就將兩個結點之和相加,這時候先判斷兩個之和是否為0,不為0,就將兩者之和賦給la的結點,並將該結點接上,然後刪除lb的節點。如果兩者之和為0.則將兩個節點都刪除。
void addit_polyn(linklist l1,linklist l2) //7.主程式將兩個鍊錶相加的函式
else
if(p1->index > p2->index)//
判斷——如果p1的指數大於p2的指數,就將p2插到l1所指的鍊錶
else
if(p1->index == p2->index) //
判斷——如果p1的指數等於p2的指數
else
//如果p1、p2係數之和為0
}r->next = null; //
結束迴圈時,先讓鍊錶和的鍊錶的尾部指向空
}
if(p1 != null) //
判斷剩餘的p1是否為空
else
if(p2!=null) //
判斷剩餘的p2是否為空
printf_polyn(l1);
//輸出鍊錶
}
首先新建兩個煉表頭指標,然後只需分別呼叫上面的函式即可
int8.完整**main()
#include usingnamespace
std;
#define ok 1
#define error 0
#define elemtype int
int flag = 1; //
定義乙個標誌變數,來區分輸出的f(x)
typedef struct polyn //
定義乙個結構體,包括三個成員變數
polyn,*linklist;
void printf_polyn(linklist l) //
輸出鍊錶
else cout
p=p->next; //
指標下移
} cout
<
}void sort_polyn(linklist &l) //
使用選擇法對鍊錶進行排序}}
printf_polyn(l);
//輸出鍊錶
flag++;
}void creat_polyn(linklist &l) //
尾插法建立鍊錶
else cout<
現在輸入第二個多項式
"<
cout
<
請輸入你要建立的項數:";
cin>>n; //
輸入項數
polyn *p,*r; //
乙個新建節點的指標和乙個尾指標
l = new polyn; //
初始化頭節點
l->next =null;
r =l;
cout
<
請輸入係數和指數(係數和指數之間用空格隔開):";
for(int j = 1;j <= n;j++) //
迴圈n次,每次新建乙個節點
}void addit_polyn(linklist l1,linklist l2) //
將兩個鍊錶相加的函式
else
if(p1->index > p2->index)//
判斷——如果p1的指數大於p2的指數,就將p2插到l1所指的鍊錶
else
if(p1->index == p2->index) //
判斷——如果p1的指數等於p2的指數
else
//如果p1、p2係數之和為0
}r->next = null; //
結束迴圈時,先讓鍊錶和的鍊錶的尾部指向空
}
if(p1 != null) //
判斷剩餘的p1是否為空
else
if(p2!=null) //
判斷剩餘的p2是否為空
printf_polyn(l1);
//輸出鍊錶
多項式相加
include include include typedef struct polyn pol 建立有序多項式 pol creatpolyn else if cnew expn clast expn else cnew pol malloc sizeof pol scanf d d cnew co...
多項式相加
include include typedef struct node 多項式資料型別的定義 polynode polynode createpoly 建立鍊錶 r next null return l void addpoly polynode pa,polynode pb 兩個多項式相加 els...
多項式相加
一.題目描述 輸入兩個多項式,按照指數遞增輸入 輸出相加和。二.題目分析 在書中第二章節中出現了多項式相加的演算法,使用鍊錶實現的,在此簡單使用結構體構造多項式的項。三.include define n 10 typedef struct item int m,n,k 0 item a n b n ...