据结构实习(C语言)一元稀疏多项式的加减乘除四则运算

绝世美人儿
937次浏览
2020年08月01日 15:40
最佳经验
本文由作者推荐

手机响了作文-屈才

一元稀疏多项式的加法运算
【问题描述】
设计一个实现一元稀疏多项式相加运算的演示程序。
【基本要求】
(1)输入并建立两个多项式;
(2)多项式a与b相加,建立和多项式c;
(3)输出多项式a,b,c。输出格式:比如多项式a为:A(x)=c1xe1+ c2xe2+…+ cmxem,其中,ci和ei分别为第i项的系数和指数,且各项按指数的升幂排列,即0≤e1<e2<…<em。多项式b,c类似输出。

程序如下:

/***************************************/
/*数据结构一元多项式的加减乘除四则运算*/
/*IceSnow Studio(冰风铃工作室) */
/*2007.01.30*/
/***********/
#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
#include<alloc.h>
struct list
{int zhishu;
int xishu;
struct list *next;
};
typedef struct list node;
typedef node *link;
/*****************************************************/
void free_list(link head)
{link pointer;
while(head!=NULL)
{pointer=head;
head=head->next;
free(pointer);}
}

/*****************************************************/
link rev(link head)
{link p1,p2;
p1=head->next;p2=p1->next;p1->next=NULL;
while(p2!=NULL)
{head->next=p2;
p2=p2->next;
head->next->next=p1;
p1=head->next;
}
return head;
}
/*****************************************************/
link find_list(link head,int key)
{link p0;
p0=head->next;
while(p0!=NULL)
{if(p0->zhishu==key) return p0;
p0=p0->next;
}
return p0;
}
/*****************************************************/
link find2_list(link head,int key)
{link p0;
p0=head;
while(p0!=NULL)
{if((p0->next->zhishu==key)&&(p0->next->xishu!=0))return p0;
p0=p0->next;
}
return p0;
}
/*****************************************************/
link clearzero(link head)
{link p0,pp;
p0=head;
while(p0!=NULL)
{if((p0->next->xishu==0)&&(p0->next->zhishu!=0))
{pp=p0->next;p0->next=pp->next;free(pp);}
p0=p0->next;
}
return head;
}
/*****************************************************/
int max_list(link head1,link head2)
{link p1;
link p2;
int temp=-10000;
p1=head1->next;
p2=head2->next;
while(p1!=NULL)
{if(p1->zhishu>temp)temp=p1->zhishu;p1=p1->next;};
while(p2!=NULL)
{if(p2->zhishu>temp)temp=p2->zhishu;p2=p2->next;};
return temp;
}
/*****************************************************/
link add_list(link head1,link head2)
{
link pointer1;
link pointer2;
link pointer3;
link new1;
link new2;
link head3;
int a=0;
int i=0;
head3=(link)malloc(sizeof(node));
if(head3==NULL)
{printf("Memory allocate Failure!
");}
else
{head3->next=NULL;head3->zhishu=0;head3->xishu=0;};
pointer1=head1->next;pointer2=head2->next;pointer3=head3;

if((pointer1->zhishu)>=(pointer2->zhishu)) {i=pointer2-
>zhishu;}
else {i=pointer1->zhishu;};
while(1)
{
if(i>max_list(head1,head2))break;
a=0;
if(f
ind_list(head1,i)!=NULL){new2=find_list(head1,i);a=a+new2->xishu;};
if(find_list(head2,i)!=NULL){new2=find_list(head2,i);a=a+new2->xishu;};
if(a!=0)
{new1=(link)malloc(sizeof(node));
new1->zhishu=i;
new1->xishu=a;
new1->next=NULL;
pointer3->next=new1;
pointer3=new1;
};
i=i+1;
};
return head3;

}
/*****************************************************/
link init_list(link head)
{head=(link)malloc(sizeof(node));
if(head==NULL)
printf("Memory allocate Failure!
");
else
{head->next=NULL;head->zhishu=0;head->xishu=0;}
return head;
}
/*****************************************************/
link jianfa(link head11,link head22)
{link p2;
p2=head22->next;
while(p2!=NULL)
{p2->xishu=(-1)*(p2->xishu);p2=p2->next;}
return add_list(head11,head22);
}

/*****************************************************/
link chufa(link head1,link head2)
{link head3=NULL,tp,new1,p3,p2,new2;
link temp=NULL;
head3=(link)malloc(sizeof(node)); head3->next=NULL;head3->zhishu=0;head3->xishu=0;
temp=(link)malloc(sizeof(node)); temp->next=NULL;temp->zhishu=0;temp->xishu=10;
init_list(head3);init_list(temp);
p3=head3;
while(1)
{if((head1->next->zhishu)<(head2->next->zhishu))
{p3->next=head1;break;};
new1=(link)malloc(sizeof(node));
new1->zhishu=(head1->next->zhishu)-(head2->next->zhishu);
new1->xishu=(head1->next->xishu)/(head2->next->xishu);
new1->next=NULL;p3->next=new1;p3=new1;

tp=temp;p2=head2->next;
while(p2!=NULL)
{ if((p2->xishu==0)&&(p2->zhishu==0)){break;};
new2=(link)malloc(sizeof(node));
new2->zhishu=p2->zhishu+p3->zhishu
new2->xishu=(p2->xishu)*(p3->xishu)
new2->next=NULL;
tp->next=new2;
tp=new2;
p2=p2->next;
};
head1=jianfa(rev(head1),rev(temp));
head1=rev(head1);
free_list(temp->next); temp->next=NULL;
};
return head3
}
/*****************************************************/
link chengfa(link head1,link head2)
{link p1,p2,p3,new1,p,tp,p31;
link head3=NULL;
head3=(link)malloc(sizeof(node));
if(head3==NULL)
{printf("Memory allocate Failure!
");}
else
{head3->next=NULL;head3->zhishu=0;head3->xishu=0;};
p1=head1->next;p2=head2->next;p3=head3;
while(p1!=NULL)
{p2=head2->next;
while(p2!=NULL)
{new1=(link)malloc(sizeof(node));
new1->zhishu=p1->zhishu+p2->zhishu;
new1->xishu=(p1->xishu)*(p2->xishu);
new1->next=NULL;
p3->next=new1;
p3=new1;
p2=p2->next;
}
p1=p1->next;
}
p3=head3->next;
while(p3!=NULL)
{p=p3;p31=p3;
while(p31!=NULL)
{if(find2_list(p31,p->zhishu)!=NULL)
{new1=find2_list(p31,p->zhishu);
p->xishu=p->xishu+new1->next->xishu;
tp=new1->next;new1->next=tp-&g
t;next;free(tp);
};
p31=p31->next;
};
p3=p3->next;
};
return clearzero(head3);
}
/*****************************************************/
void print_list(link head)
{link pointer;
pointer=head->next;
printf(" ");
while(pointer!=NULL)
{printf("%d x^%d ",pointer->xishu,pointer->zhishu);
if(pointer->next!=NULL)printf("+");
pointer=pointer->next;
}
printf("
");}
/*****************************************************/
/*void print_list(link head)
{link pointer;
pointer=head->next;
printf("(zhishu , xishu)
");
while(pointer!=NULL)
{printf("%d , %d
",pointer ->zhishu,pointer->xishu);
pointer=pointer->next;
}
printf("
"); }
/*****************************************************/
link create_list(link head)
{link new1;
link pointer;
head=(link)malloc(sizeof(node));
if(head==NULL)
printf("Memory allocate Failure!
");
else
{head->next=NULL;head->zhishu=0;head->xishu=0;
pointer=head;
while(1)
{
new1=(link)malloc(sizeof(node));
printf("
input zhishu and xishu:");
scanf("%d %d",&(new1->zhishu),&(new1->xishu));
if (new1->xishu==0)
{printf(" ***** One linked list is ok! *****

");break;};
new1->next=NULL;
pointer->next=new1;pointer=new1;
}/*while*/
}/*else*/
return head;
}
/*****************************************************/
void main()
{ int q=0;
printf("
Hello,The program starts!
");
printf("***************************************************
");
printf("说明:为链表输入数据,系数值为零时退出!
");
printf("The zhishu of the polynomial is from high to low!
");
printf("Finished when the xishu is zero!
");
printf("The zhishu and xishu are all integer type!
");
printf("***************************************************
");

while(1){q=0;
printf("

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
");
printf("Continiue to input datas !
");
printf("(1)jia fa!
");
printf("(2)jian fa!
");
printf("(3)chu fa!
");
printf("(4)cheng fa!
");
printf("(0)Exit the system!
");
scanf("%d",&q);
if(q!=0&&(q==1||q==2||q==3||q==4))
{
link head1=NULL;
link head2=NULL;
link head3=NULL;
head1=create_list(head1);
head2=create_list(head2);
if(head1!=NULL&&head2!=NULL)
{printf("The first polynomial:
");
print_list(head1);
printf("The second polynomial:
");
print_list(head2);
printf("Now the result is:
");
switch(q){
case 1:head3=rev(add_list(rev(head1),rev(head2)));break;
case 2:head3=jianfa(head1,head2);break;
case 3:head3=chufa(head1,head2);break;
case 4:head3=chengfa(head1,head2);break;
def
ault:break;}
printf("The finished polynomial:
");
print_list(head3);
printf("That is over!
");
free_list(head1);
free_list(head2);
free_list(head3);
}/*if*/
if(head1==NULL&&head2==NULL){printf("
The list is empty!!!
");};
}/*if*/
if(q==0){break;};
}/*while*/}


我为什么还在等待-文恬武嬉


翻译的原则-违害就利


挑怎么组词-淀怎么读


日食月食形成示意图-盥洗


缭组词-视阈


臂成语-软儿


名词做定语-刀俎读音


关于茶的成语-埋伏拼音