{
LinkList *p=L->next,*q,*r; if(p!=NULL) {
r=p->next; p->next=NULL; p=r;
while(p!=NULL) {
r=p->next; q=L;
while(q->next!=NULL&&((q->next->xexp>p->xexp)||(q->next->xexp==p->xexp&&q->next->yexp>p->yexp))) q=q->next; p->next=q->next; q->next=p; p=r; } } }
//两个多项式相加
void ListAdd(LinkList *&L1,LinkList *&L2,LinkList *&L3) {
int coef[MAX1+MAX2],xexp[MAX1+MAX2],yexp[MAX1+MAX2],i=0; LinkList *p=L1->next,*q=L2->next; while(p!=NULL&&q!=NULL) {
if(p->xexp
coef[i]=p->coef; xexp[i]=p->xexp; yexp[i]=p->yexp; i++;
p=p->next; }
else if(p->xexp>q->xexp) {
coef[i]=q->coef; xexp[i]=q->xexp; yexp[i]=q->yexp; i++;
q=q->next;
}
else if(p->xexp==q->xexp&&p->yexp
coef[i]=p->coef; xexp[i]=p->xexp; yexp[i]=p->yexp; i++;
p=p->next; }
else if(p->xexp==q->xexp&&p->yexp>q->yexp) {
coef[i]=q->coef; xexp[i]=q->xexp; yexp[i]=q->yexp; i++;
q=q->next; }
else if(p->xexp==q->xexp&&p->yexp==q->yexp) {
coef[i]=p->coef+q->coef; xexp[i]=p->xexp; yexp[i]=p->yexp; i++;
p=p->next; q=q->next; } }
while(p!=NULL&&q==NULL) {
coef[i]=p->coef; xexp[i]=p->xexp; yexp[i]=p->yexp; i++;
p=p->next; }
while(q!=NULL&&p==NULL) {
coef[i]=q->coef; xexp[i]=q->xexp; yexp[i]=q->yexp; i++;
q=q->next; }
CreateList(L3,coef,xexp,yexp,i); sort(L3); }
//两个多项式相减
void ListSubtract(LinkList *&L1,LinkList *&L2,LinkList *&L3) {
int coef[MAX1+MAX2],xexp[MAX1+MAX2],yexp[MAX1+MAX2],i=0; LinkList *p=L1->next,*q=L2->next; while(p!=NULL&&q!=NULL) {
if(p->xexp
coef[i]=p->coef; xexp[i]=p->xexp; yexp[i]=p->yexp; i++;
p=p->next; }
else if(p->xexp>q->xexp) {
coef[i]=-q->coef; xexp[i]=q->xexp; yexp[i]=q->yexp; i++;
q=q->next; }
else if(p->xexp==q->xexp&&p->yexp
coef[i]=p->coef; xexp[i]=p->xexp; yexp[i]=p->yexp; i++;
p=p->next; }
else if(p->xexp==q->xexp&&p->yexp>q->yexp) {
coef[i]=-q->coef; xexp[i]=q->xexp; yexp[i]=q->yexp; i++;
q=q->next; }
else if(p->xexp==q->xexp&&p->yexp==q->yexp) {
coef[i]=p->coef-q->coef;
xexp[i]=p->xexp; yexp[i]=p->yexp; i++;
p=p->next; q=q->next; } }
while(p!=NULL&&q==NULL) {
coef[i]=p->coef; xexp[i]=p->xexp; yexp[i]=p->yexp; i++;
p=p->next; }
while(q!=NULL&&p==NULL) {
coef[i]=-q->coef; xexp[i]=q->xexp; yexp[i]=q->yexp; i++;
q=q->next; }
CreateList(L3,coef,xexp,yexp,i); sort(L3); }
//显示多项式
void DisplayList(LinkList *&L) {
LinkList *p=L->next;
printf(\
p=p->next;
while(p!=NULL) { {
if(p->coef>0)
printf(\else
printf(\}
p=p->next;
} }
//菜单
int menu_select() {
int choose;
printf(\printf(\、两个多项式的和\\n\printf(\、两个多项式的差\\n\printf(\、退出\\n\
printf(\请选择(1或2或0)\\n\
printf(\for( ; ; ) {
scanf(\ if(choose<0||choose>2)
printf(\输入有误,重新选择\\n\ else
break; }
return choose; }
//主函数 void main() {
int coef[MAX1],xexp[MAX1],yexp[MAX1],i=0; LinkList *L1,*L2,*LSum;
printf(\输入第一个多项式的所有系数(%d个):\\n\输入第一个多项式的系数 for(i=0;i printf(\输入第一个多项式所有的x幂(%d个):\\n\输入第一个多项式的x幂 for(i=0;i printf(\输入第一个多项式所有的y幂(%d个):\\n\输入第一个多项式的y幂 for(i=0;i CreateList(L1,coef,xexp,yexp,MAX1); printf(\输入第二个多项式的所有系数(%d个):\\n\输入第二个多项式的系数 for(i=0;i printf(\输入第二个多项式所有的x幂(%d个):\\n\输入第二个多项式的x幂 for(i=0;i printf(\输入第二个多项式所有的y幂(%d个):\\n\输入第二个多项式的y幂 for(i=0;i scanf(\ CreateList(L2,coef,xexp,yexp,MAX2); printf(\降幂显示第一个多项式:\\n\降幂显示第一个多项式 sort(L1); DisplayList(L1); printf(\降幂显示第二个多项式:\\n\降幂显示第二个多项式 sort(L2); DisplayList(L2); printf(\ for(; ;) { switch(menu_select()) { case 1: printf(\求两个多项式的和并显示:\\n\求两个多项式的和并显示 ListAdd(L1,L2,LSum); DisplayList(LSum); printf(\ break; case 2: printf(\求两个多项式的差并显示:\\n\求两个多项式的差并显示 ListSubtract(L1,L2,LSum); DisplayList(LSum); printf(\ case 0: default :printf(\退出!\\n\ break; } } }