1.題目
實現一元多項式的加減法運算,要求多項式採用鍊錶儲存結構。
2.測試用例
(1)a(x)=3x^1000 +7x^3-2x+1
b(x)=x^99 -x^3+2x+8
加法運算結果:
c(x)=9.00 +6.00x^3 +1.00x^99 +3.00x^1000
減法運算結果:
d(x)=-7.00 -4.00x+8.00x^3 -1.00x99+3.00x1000
(2)a(x)= 3x^5 +7x^3+1
b(x)=9x^6 -7x3+4x2+5x-1
加法運算結果:
c(x)= 5.00x+4.00x^2 +3.00x^5 +9.00x^6
減法運算結果:
d(x)=2.00 -5.00x-4.00x^2 +14.00x^3 +3.00x^5 -9.00x^6
(3)a(x)= 3x^5 +7x^3+1
b(x)=-3x^5 -7x^3-1
加法運算結果:
c(x)=0
減法運算結果:
d(x)=2.00 +14.00x^3 +6.00x^5
(4)a(x)=0
b(x)=1
加法運算結果:
c(x)=1.00
減法運算結果:
d(x)=-1.00
(5)a(x)=x^4 +x^2+1
b(x)=x^5 +x^3 -x^2+1
加法運算結果:
c(x)=2.00 +1.00x^3 +1.00x^4 +1.00x^5
減法運算結果:
d(x)=2.00x^2 -1.00x^3 +1.00x^4 -1.00x^5
3演算法描述
(1)一元多項式的儲存
採用鍊錶來儲存多項式。考慮到多項式習慣用降冪排列,因此建立多項式時,進行乙個排序。
(2)一元多項式的建立
建立一元多項式,分別輸入每一項的係數和指數。
(3)一元多項式的加減法
兩個多項式進行加減法運算時,建立乙個新的鍊錶,把結果存在裡面要注意當係數之和或之差為0時,將結點刪除。
4驗證演算法對測試用例的操作步驟
以a(x)=x^4 +x^2 +1、b(x)=x^5 +x^3- x^2+1的加法為例,說明演算法操作的步驟。
1)建立鍊錶,將多項式儲存,鍊錶中儲存多項式係數和指數。
2)對多項式進行排序,按照公升冪的次序將多項式中每一項進行排序。
3)分別輸出兩個多項式。
4)對兩個多項式分別進行加法和減法運算。進行加減法運算時,若指數想相同,則將係數相加減,若指數不同,則新建立節點,儲存資料,注意:當係數為0時,將該節點刪除,即該項為0。
5)輸出兩個多項式加減法的運算結果。
建立第乙個鍊錶儲存a(x),
係數(ratio) 指數(index) 位址(next)
1 4
1 2
1 0 null
建立第二個鍊錶儲存b(x),
係數(ratio) 指數(index) 位址(next)
1 5
1 3
-1 2
1 0 null
利用排序函式將兩鍊錶進行排序
排序結果如下
係數(ratio) 指數(index) 位址(next)
1 0
1 2
1 4 null
多項式a(x):
多項式b(x):
係數(ratio) 指數(index) 位址(next)
1 0
-1 2
1 3
1 5 null
對兩多項式進行加減法運算:
加法運算的結果如下:
係數(ratio) 指數(index) 位址(next)
2 0
0 2
1 3
1 4
1 5 null
對於係數為0的項,要將其刪除,結果如下:
係數(ratio) 指數(index) 位址(next)
2 2
-1 3
1 4
-1 5 null
得到加減法運算的結果,輸出運算結果即可。
#include
#include
static
struct poly *head1,
*head2;
struct poly
;//建立鍊錶,index儲存指數,ratio儲存係數
struct poly *
creat()
for(t=head->next; t!=
null
; t=t->next)}if
(flag==0)
}return head;};
//輸入資料,在輸入時,可能存在輸入兩次相同係數的資料,此時將兩組資料合併
struct poly sort
(struct poly *head)
temp1=temp1->next;
} temp2=temp1;
temp1=head->next;}}
;//將多項式進行排序,以符合我們通常狀態下公升冪的次序
struct poly add
(struct poly *head1,
struct poly *head2)
}//求和時,若head1為空,則直接將head2複製到新結果中去
else
if(q==
null)}
//若head2為空,則將head1複製到結果中去
}else
else
if(p->index>q->index)
else
else}}
//若head1和head2都不為空,則按照公升冪的次序將其排序相加,係數為0的項不需要,注意,一定要按照次序來,少使用排序函式
}print
(head);}
;//對兩多項式進行求和,求和結果儲存在另乙個結構體中
struct poly sub
(struct poly *head1,
struct poly *head2)
}else
if(q==
null)}
}else
else
if(p->index>q->index)
else
else}}
}print
(head);}
;//多項式求差,與求和同理
void
print
(struct poly *head)
//多項式的輸出,若多項式為null則直接輸出0
while
(temp!=
null
)else
printf
(" ");
}//在輸出第一項時,係數為正,直接輸出,係數為負,也直接輸出
else
else
printf
(" ");
}else
else
printf
(" ");
}//之後的每一項中,係數為正,則加上正號,即加號,係數為負,可直接輸出
} temp=temp->next;
}printf
("\n");
};intmain()
temp=head2;
while
(temp!=
null
)//釋放空間
return0;
}
一元多項式加法鍊錶實現
使用鍊錶實現一元多項式加法 並使用已有鍊錶返回運算結果 一元多項式求和 void sumlist slist a,slist b else output m output n t m next while m next null n next null else if m next exp n ne...
鍊錶實現一元多項式相加
c 鍊錶實現一元多項式相加 如下 輸入多項式按次數從高到低排列 include include using namespace std intmain 定義節點型別,coe表示x前的係數,order表示x的次數 int coe,order int i int nodenuma 多項式a的項數 pri...
一元稀疏多項式加減
一元稀疏多項式加減 include include include define ok 1 define error 0 typedef int status typedef struct pnodepnode,polynomial 建立乙個多項式鍊錶 status creatpolynnomial...