数据结构 多项式加减问题
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "malloc.h"
typedef struct LNode{
int coef;
int index;
struct LNode *next;
}node,*Linklist;
Linklist create_list(){
int finished,i,j,k;
Linklist p,head,L;
finished=0;
head=(Linklist)malloc(sizeof(node));
head->coef=0;
head->index=-1;
head->next=head;
L=head;
while(finished==0){
p=(Linklist)malloc(sizeof(node));
fflush(stdin);
printf("请输入多项式的指数(以XYZ的顺序输入且各系数都在0到9之间):");
scanf("%d,%d,%d,%d",&p->coef,&i,&j,&k);
p->index=i*100+j*10+k;
L->next=p;
L=p;
fflush(stdin);
printf("输入0会再次输入项,其他数字结束!!!:");
scanf("%d",&finished);
if(finished!=0){
finished++;
} 问题1:没有这个地方的代码的时候终止不了循环,我直接敲一个不是0的值付给finished,为什么不能终止循环!!!
}
L->next=head;
return head;
}
void add_Linklist(Linklist p,Linklist q){
Linklist q1,q2;
p=p->next;
q=q->next;
while(p->index>=0){
while(p->index<q->index){
q1=q;
q=q->next;
}
if(p->index==q->index){
q->coef+=p->coef;
if(q->coef==0){
q2=q;
q1->next=q->next;
q=q->next;
free(q2);
p=p->next;
}else{
q1=q;问题二:没有这行代码时,相同系数的相加得到的值,会丢失,就是在打印出来的时候没有这一行!
p=p->next;
q=q->next;
}
}else{
q2=(Linklist)malloc(sizeof(node));
q2->coef=p->coef;
q2->index=p->index;
q2->next=q;
q1->next=q2;
p=p->next;
q1=q2;
}
}
}
void print(Linklist p){
int i,j,k;
p=p->next;
while(p->index>=0){
i=p->index/100;
j=(p->index%100)/10;
k=(p->index%100)%10;
printf("%d X%dY%dZ%d\n",p->coef,i,j,k);
p=p->next;
}
}
void main()
{
Linklist p,q;
printf("多项式相加运算,请输入第一个多项式\n");
p=create_list();
print(p);
printf("多项式相加运算,请输入第二个多项式\n");
q=create_list();
print(q);
add_Linklist(p,q);
print(q);
}
新人求高手帮忙!!!!!!!!!!
[解决办法]
- C/C++ code
Linklist create_list(){ int finished,i,j,k; Linklist p,head,L; finished=0; head=(Linklist)malloc(sizeof(node)); head->coef=0; head->index=-1; head->next=head; L=head; while(finished==0) { p=(Linklist)malloc(sizeof(node)); fflush(stdin); printf("请输入多项式的指数(以XYZ的顺序输入且各系数都在0到9之间):"); scanf("%d,%d,%d,%d",&p->coef,&i,&j,&k); p->index=i*100+j*10+k; L->next=p; L=p; fflush(stdin); printf("输入0会再次输入项,其他数字结束!!!:"); scanf("%d",&finished);//我注释掉了下面的几行之后,直接输入2是可以结束循环的 //if(finished!=0) //{ // finished++; //}// } L->next=head; return head;}