#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFALSE -2
typedef int Status;
typedef int ElemType;
typedef struct LNode{
float date;
ElemType jin;
struct LNode next;
}LNode, LinkList;
void CreateList_L(LinkList &L){
int i;
int n;
LinkList p,q;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
q=L;
printf(“请输入组数:”);
scanf("%d",&n);
if(n<=0){
printf(“请输入大于0的组数\n”);
printf(“请输入组数:”);
scanf("%d",&n);
if(n<=0) {
printf(“输入组数错误\n”);
exit(OVERFALSE);
}
}
for(i=0;i<n;i++){
p=(LinkList)malloc(sizeof(LNode));
printf(“请输入常数和指数:”);
scanf("%f %d",&p->date,&p->jin);
p->next=NULL;
q->next=p;
q=p;
}
}
void MyPrintf(LinkList L){
LinkList q;
q=L->next;
while(q!=NULL){
printf("%.3fX^%d",q->date,q->jin);
if(q->next!=NULL&&q->next->date>0)
printf("+");
q=q->next;
}
}
LinkList AddLinkList(LinkList L1,LinkList L2){
LinkList pa,pb,s,pc,p,tc;
pc=(LinkList)malloc(sizeof(LNode));
pc->next=NULL;
tc=pc;
pa=L1->next;
pb=L2->next;
while(pa!=NULL&&pb!=NULL)
{
if(pa->jinjin)
{
s=(LinkList)malloc(sizeof(LNode));
s->date=pa->date;
s->jin=pa->jin;
s->next=NULL;
tc->next=s;
tc=s;
pa=pa->next;
}
else if(pa->jin>pb->jin)
{
s=(LinkList)malloc(sizeof(LNode));
s->date=pb->date;
s->jin=pb->jin;
s->next=NULL;
tc->next=s;
tc=s;
pb=pb->next;
}
else
{
if(pa->date+pb->date!=0)
{
s=(LinkList)malloc(sizeof(LNode));
s->date=pa->date+pb->date;
s->jin=pa->jin;
s->next=NULL;
tc->next=s;
tc=s;
}
pa=pa->next;
pb=pb->next;
}
}
if(pa!=NULL)
p=pa;
else
p=pb;
while(p!=NULL)
{
s=(LinkList)malloc(sizeof(LNode));
s->date=p->date;
s->jin=p->jin;
s->next=NULL;
tc->next=s;
tc=s;
p=p->next;
}
return pc;
}
LinkList ChenLinkList(LinkList L1,LinkList L2){
LinkList pa,pb,s,pc,p,tc;
pc=(LinkList)malloc(sizeof(LNode));
pc->next=NULL;
tc=pc;
pa=L1->next;
pb=L2->next;
while(pa!=NULL){
for(;pb!=NULL;){
s=(LinkList)malloc(sizeof(LNode));
s->date=pa->datepb->date;
s->jin=pa->jin+pb->jin;
s->next=NULL;
tc->next=s;
tc=s;
pb=pb->next;
}
pa=pa->next;
if(pbNULL&&pa!=NULL)
pb=L2->next;
}
return pc;
}
LinkList ZhengliLinkList(LinkList K){
LinkList pa,pb,s,pc,p,tc,m,ht,ha,hc;
pc=(LinkList)malloc(sizeof(LNode));
pc->next=NULL;
tc=pc;
pa=K->next;
while(pa!=NULL){
pb=pa->next;
p=pb;
while(pb!=NULL){
if(pa->jin!=pb->jin){
pb=pb->next;
}else{
pb->date=pa->date+pb->date;
pa->date=0;
pb=pb->next;
pa=p;
}
}
if(pa!=p&&pbNULL){
s=(LinkList)malloc(sizeof(LNode));
s->date=pa->date;
s->jin=pa->jin;
s->next=NULL;
tc->next=s;
tc=s;
pa=pa->next;
}
}
hc=(LinkList)malloc(sizeof(LNode));
hc->next=NULL;
ht=hc;
ha=pc->next;
while(ha!=NULL){
if(ha->date0){
ha=ha->next;
}else{
s=(LinkList)malloc(sizeof(LNode));
s->date=ha->date;
s->jin=ha->jin;
s->next=NULL;
ht->next=s;
ht=s;
ha=ha->next;
}
}
if(hc->nextNULL){
printf(“合并同类型错误”);
exit(0);
}
return hc;
}
main(){
LinkList S,F;
CreateList_L(S);
LinkList s=ZhengliLinkList(S);
MyPrintf(s);
printf("\n");
CreateList_L(F);
LinkList f=ZhengliLinkList(F);
MyPrintf(f);
printf("\n");
LinkList M=AddLinkList(s,f);
printf("加法:\n");
LinkList m=ZhengliLinkList(M);
MyPrintf(m);
printf("\n");
LinkList K=ChenLinkList(s,f);
LinkList k=ZhengliLinkList(K);
printf("乘法:\n");
MyPrintf(k);
printf("\n");
}