链式
#include <stdio.h>
#include <stdlib.h>
#include"conio.h"
typedef int ElemType;
typedef int Status;
#define OK 1
#define OVERFLOW -1
#define TRUE 1
#define FAUSE 0
#define ERROR 0
typedef struct Node
{
float coef;//系数
int expn;//指数
struct Node *next;
}LPolyn, *LinkPolyn;
Status InitPolyn(LinkPolyn *P)//初始化
{
LPolyn *p;
p=(LinkPolyn)malloc(sizeof(LPolyn));
if(!p)
return ERROR;
*P=p;
(*P)->next=NULL;
return OK;
}
Status CreatPolyn(LinkPolyn P,int n)
{
LPolyn *q,*p;
int i,e;
float c;
p=P;
for(i=0;i<n;i++)
{
q=(LPolyn *)malloc(sizeof(LPolyn));
printf("input NO %d 's coef expn:",i+1);
scanf("%f%d",&c,&e);
q->coef=c;
q->expn=e;
if(c==0)
continue;
q->next=p->next;
p->next=q;
p=q;
}
return OK;
}
Status DestoyPolyn(LinkPolyn *P)
{
LPolyn *p,*q;
p=*P;
while(p!=NULL)
{
q=p->next;
free(p);
p=q;
}
*P=NULL;
return OK;
}
void PrintPolyn(LinkPolyn P)
{
LPolyn *q;
if(!P->next)
{
printf("there is no terms!\n");
return ;
}
q=P->next;
while(q->next)
{
//printf("<%.2f,%d>, ",q->coef,q->expn);
if(q->next->coef>0)
printf("%.2fx^%d+",q->coef,q->expn);
else
printf("%.2fx^%d",q->coef,q->expn);
q=q->next;
}
if(q->coef>0)
printf("%.2fx^%d",q->coef,q->expn);
else
printf("%.2fx^%d",q->coef,q->expn);
printf("\n");
}
int PoynLength(LinkPolyn P)
{
int i=0;
LPolyn *q;
if(!P)
{
return 0;
}
q=P->next;
while(q)
{
q=q->next;
i++;
}
return i;
}
Status AddPolyn(LinkPolyn Pa,LinkPolyn Pb,LinkPolyn Pc)
{
LPolyn *a,*b;
a=Pa->next;
b=Pb->next;
while(a&&b)
{
if(a->expn<b->expn)
{
Pc->next = a;
a=a->next;
Pc= Pc->next;
Pc->next = NULL;
}
else if(a->expn>b->expn)
{
Pc->next = b;
b=b->next;
Pc= Pc->next;
Pc->next = NULL;
}
else
{
float x=(a->coef)+(b->coef);
if(x!=0)
{
Pc->next = b;
b=b->next;
Pc->next->coef=x;
Pc = Pc->next;
Pc->next = NULL;
}
else
{
b = b->next;
}
a=a->next;
}
}
if(b!=NULL)
{
Pc->next=b;
}
if(a!=NULL)
{
Pc->next=a;
}
return OK;
}
void main()
{
LinkPolyn P;
int choice=1;
if(InitPolyn(&P)==OK)
printf("Successful\n");
else
printf("Failure\n");
while(choice!=0)
{
system("cls");
printf("\n 1.CreatPolyn 2.DestoyPolyn 3.PrintPolyn \n");
printf("\n 4.PoynLength 5.AddPolyn \n");
printf("\n 0.Exit\n");
printf("\nPlease input your choice:\n");
scanf("%d",&choice);
switch(choice)
{
case 0:
printf("Nice to meet you!\n");
break;
case 1:
{
int n;
printf("input n:");
scanf("%d",&n);
if(CreatPolyn(P,n)==OK)
printf("successful!\n");
else
printf("failure!\n");
}
break;
case 2:
{
if(DestoyPolyn(&P)==OK)
printf("successful\n");
else
printf("failure!\n");
}
break;
case 3:
{
PrintPolyn(P);
}
break;
case 4:
{
printf("The polynomial has %d terms!\n",PoynLength(P));
}
break;
case 5:
{
LinkPolyn Pa,Pb,Pc;
int n;
InitPolyn(&Pc);
InitPolyn(&Pa);
printf("input Pa's terms ");
scanf("%d",&n);
CreatPolyn(Pa,n);
InitPolyn(&Pb);
printf("input Pb's terms ");
scanf("%d",&n);
CreatPolyn(Pb,n);
AddPolyn(Pa,Pb,Pc);
PrintPolyn(Pc);
}
break;
}
getch();
}
}