数据结构-多项式相乘
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多项式相乘
•问题描述
此程序解决的是一元多项式相乘的问题。定义两个一元多项式,然后进行两个一元多项式的相乘。最后得到一个结果,并按升幂输出最终的多项式。
•设计思路
定义一个结构体,里面包含一元多项式的符号、系数、指数。对多项式进行输入时,先输入多项式的项数,然后从第一项的系数开始输入,然后输入第一项的指数,直至第一项输入完毕。然后开始输入第二项,输入第二项的方法与输入第一项的方法相同。在进行相乘时,用第二项的每个元素去乘第一项的每个元素。最终合并同类项的时候,把后面指数项加到与前面有共同指数的项的上面,然后删除该项。
•数据结构设计
将多项式因子的符号、系数、指数封装成一个结构为顺序表类型
•功能函数设计
void sort(LinkYinzi& Head)排序函数,采用冒泡排序对多项式进行排序
void PrintList(const LinkYinzi Head)输出多项式函数
void Creat_List(LinkYinzi& Head, int num)创建多项式函数
void DelList(LinkYinzi& Head, int n)删除多项式中某一项函数
void multip(const LinkYinzi Head1, const LinkYinzi Head2)多项式相乘函数
void menu_elect( LinkYinzi Head1, LinkYinzi Head2)功能选择函数
•程序代码
#include
using namespace std;
typedef struct Yinzi{
char sign;
float coef;//系数
int expn;//指数
Yinzi* next;
}Yinzi,*LinkYinzi;
void sort(LinkYinzi& Head){
LinkYinzi Q;//采用冒泡排序对多项式进行排序
for(LinkYinzi P1 = NULL; P1 != Head->next->next; P1 = Q)
for(LinkYinzi P2 = Head->next; P2->next != P1; P2 = P2->next){
if(P2->expn > P2->next->expn){
int temp1;
double temp2;
char temp3; //temp3是交换变量
temp2 = P2->coef;
P2->coef = P2->next->coef;
P2->next->coef = temp2;
temp3 = P2->sign;
P2->sign = P2->next->sign;
P2->next->sign = temp3;
temp1 = P2->expn;
P2->expn = P2->next->expn;
P2->next->expn = temp1;
}
Q = P2->next;//此处让Q为本次执行后的P2的下一个,以便P1=Q让P1成为P2的下一个,作为下一次循环的结束标志。
}
}//冒泡排序(升序)
void PrintList(const LinkYinzi Head){
LinkYinzi p = Head ->next;
if(p != NULL ){
if(p->coef != 0){//系数不为0
if(p->expn != 0){//指数不为0
if(p->expn != 1){
if(p->coef == 1)
cout << "x^" << p->expn;
else
cout << p->coef << "x^" << p->expn;
}
else{
if(p->coef == 1)
cout << "x";
else
cout << p->coef << "x";
}
}
else
cout << p->coef;
}
p = p->next;
}//输出第一项
while(p != NULL){
if(p->sign == '+'){
if(p->coef != 0){
if(p->expn != 0){
if(p->expn != 1){
if(p->coef == 1)
cout << '+' << "x^" << p->expn;
else
cout << '+' << p->coef << "x^" << p->expn;
}
else{
if(p->coef == 1)
cout << '+' << "x";
else
cout << '+' << p->coef << "x";
}
}
else
cout << '+' << p->coef;
}
else{
p = p->next;
continue;
}
}
if(p->sign == '-'){
if(p->coef != 0){
if(p->expn != 0){
if(p->expn != 1){
if(p->coef == -1)
cout << '-' << "x^" << p->expn;
else
cout << p->coef << "x^" << p->expn;
}
else{
if(p->coef == -1)
cout << '-' << "x";
else
cout << p->coef << "x";
}
}
else
cout << p->coef;
}
else{