问题遇到的现象和发生背景
用代码块功能插入代码,请勿粘贴截图
#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
float coe;
int ind;
struct Lnode* next;
}Lnode,*Linklist;
Linklist Creat(int n);
Linklist outputc(Linklist L,int n);
Linklist Comadd(Linklist L1,Linklist L2,Linklist L3);
int main(){
Linklist L,L1,L2,L3;
int n;
printf("\n请输入多项式的项数:");
scanf("%d",&n);
printf("\n请输入L1的各项:");
L1=Creat(n);
printf("\nL1为:");
outputc(L1,n);
printf("\n请输入L2的各项:");
L2=Creat(n);
printf("\nL2为:");
outputc(L2, n);
printf("\n将两式相加得:");
L3=Comadd(L1,L2,L3);
outputc(L3,n);
}
//创建单链表 尾插法
Linklist Creat(int n){
Linklist L,r,p;
L=(Linklist)malloc(sizeof(Lnode));
r=L;
int i;
for(i=0;i<n;i++){
p=(Linklist)malloc(sizeof(Lnode));
float coe;
int ind;
scanf("%f %d",&coe,&ind);
p->coe =coe;
p->ind =ind;
p->next =NULL;
r->next =p;
r=p;
}
return L;
}
//输出单链表
Linklist outputc(Linklist L,int n){
int i=0;
Linklist p;
p=L->next ;
while(p && i<n){
if(p->next ){//若p的下一项不存在,则p为最后一项
if(p->ind >=0){
printf("%fx^%d+",p->coe ,p->ind );
}
else
printf("%fx^(%d)+",p->coe ,p->ind );
}
else {
printf("%fx^%d",p->coe ,p->ind );
}
p=p->next ;
i++;
}
}
//比较单链表中同类项系数大小,并加入新链表中
Linklist Comadd(Linklist L1,Linklist L2,Linklist L3){
L3=(Linklist)malloc(sizeof(Lnode));
Linklist p1,p2,p3,t;
p1=L1->next ;
p2=L2->next ;
p3=L3->next ;
t=(Linklist)malloc(sizeof(Lnode));
while(L1 && L2){
if(p1->ind ==p2->ind ){
p3->coe =p1->coe +p2->coe ;
p3->ind =p1->ind ;
p3->next =NULL;
t->next =p3;
t=p3;
p1=p1->next ;
p2=p2->next ;
p3=p3->next ;
}
if(p1->ind < p2->ind ){
p3->coe =p1->coe ;
p3->ind =p1->ind ;
p3=p3->next ;
while(p1){
p1=p1->next ;
if(p1->ind ==p2->ind ){
p3->coe =p1->coe +p2->coe ;
p3->ind =p1->ind ;
p3->next =NULL;
t->next =p3;
t=p3;
p3=p3->next ;
}
else if(p1->ind <p2->ind ){
p3->coe =p1->coe ;
p3->ind =p1->ind ;
p3->next =NULL;
t->next =p3;
t=p3;
p3=p3->next ;
}
else if(p1->ind >p2->ind ){
p3->coe =p2->coe ;
p3->ind =p2->ind ;
p3->next =NULL;
t->next =p3;
t=p3;
p3=p3->next ;
}
}
p2=p2->next ;
}
if(p1->ind > p2->ind ){
p3->coe =p2->coe ;
p3->ind =p2->ind ;
p3=p3->next ;
while(p2){
if(p1->ind ==p2->ind ){
p3->coe =p1->coe +p2->coe ;
p3->ind =p1->ind ;
p3->next =NULL;
t->next =p3;
t=p3;
p3=p3->next ;
}
else if(p2->ind <p1->ind){
p3->coe =p2->coe ;
p3->ind =p2->ind ;
p3->next =NULL;
t->next =p3;
t=p3;
p3=p3->next ;
}
else if(p2->ind >p1->ind ){
p3->coe =p1->coe ;
p3->ind =p1->ind ;
p3->next =NULL;
t->next =p3;
t=p3;
p3=p3->next ;
}
}
p1=p1->next ;
}
}
while(p1 && !p2){
p3->coe =p1->coe ;
p3->ind =p1->ind ;
p3->next =NULL;
t->next =p3;
t=p3;
p3=p3->next ;
p1=p1->next ;
}
while(!p1&& p2 ){
p3->coe =p2->coe ;
p3->ind =p2->ind ;
p3->next =NULL;
t->next =p3;
t=p3;
p3=p3->next ;
p2=p2->next ;
}
return L3;
}