浙江大学数据结构慕课学习
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。
输入样例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
输出样例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0
注意
1、在建立链表时可以不用tag,而是先建立一个带头结点的链表,最后把头结点删掉。
2、注意循环中break的使用
3、熟练使用链表的插入删除。插入时要找被插入位置的前一个位置,即用 while(r->link)去遍历
源代码:
#include<iostream>
using namespace std;
struct PolyNode{
int coef;//系数
int expon;//指数
struct PolyNode *link;
};
typedef struct PolyNode * Polynomial;
Polynomial BuildPoly();
Polynomial AddPoly(Polynomial p1,Polynomial p2);
Polynomial MulPoly(Polynomial p1,Polynomial p2);
void Output(Polynomial p);
int main(){
Polynomial P1,P2;
Polynomial P3,P4;//P3为和,P4为积
P1 = BuildPoly();
P2 = BuildPoly();
P4 = MulPoly(P1,P2);
Output(P4);
cout<<endl;
P3 = AddPoly(P1,P2);
Output(P3);
}
Polynomial BuildPoly(){
Polynomial p = NULL;
Polynomial rear;
int tag = 0;//若是第一个节点,则直接p = rear = l,后面节点则不同
int N;
cin>>N;
for(int i = 0;i<N;i++){
Polynomial l;
l = new PolyNode;
cin>>l->coef ;
cin>>l->expon ;
l->link = NULL