读书人

数据结构 多项式加减有关问题

发布时间: 2012-05-14 15:24:34 作者: rapoo

数据结构 多项式加减问题
/* 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;} 

读书人网 >C语言

热点推荐