連結串列做的一元多項式表示及相加
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
struct node
{
int num;
int f;
struct node *next;
};
typedef struct node *linklist;//結構體指標
void chu(linklist &head)//初始化
{
head=(linklist)malloc(sizeof(struct node));
head->next=NULL;
head->num=0;
head->f=0;
}
linklist in(linklist &p,int m,int n)//進連結串列
{
linklist s;
s=(linklist)malloc(sizeof(struct node));
s->num=m;
s->f=n;
s->next=p->next;
p->next=s;
return s;
}
void out(linklist &head)//出連結串列
{
linklist p=head->next;
while(p!=NULL)
{
printf("%dX^%d ",p->num,p->f);
p=p->next;
}
}
void sum(linklist &head1,linklist &head2,linklist head3)//計算和
{
linklist p1=head1->next,p2=head2->next,l1,l2,q=head3;
int a,b;
while(p1!=NULL&&p2!=NULL)
{
if(p1->f==p2->f)
{
a=p1->num+p2->num;
b=p1->f;
l1=p1;
l2=p2;
p1=p1->next;
p2=p2->next;
q=in(q,a,b);
}
else if(p1->f<p2->f)
{
a=p1->num;
b=p1->f;
p1=p1->next;
q=in(q,a,b);
}
else if(p1->f>p2->f)
{
a=p2->num;
b=p2->f;
p2=p2->next;
}
}
if(p1!=NULL) q->next=p1;
if(p2!=NULL) q->next=p2;
}
void dele(linklist head)
{
linklist p=head,q;
while(!p)
{
q=p;
free(q);
p=p->next;
}
}
main()
{ printf(" **********\n");
printf("一元多項式的指數請按照***遞增***的順序輸入!\n");
printf(" **********\n");
int m,n,xi,zhi;
printf("請輸入第一個一元多項式的項數,輸入以後請按回車鍵\n");
scanf("%d",&m);
linklist head1;
chu(head1);
linklist p=head1;
printf("請先輸入係數再輸入指數,中間以空格鍵間隔\n");
for(int i=0;i<m;i++)
{
printf("請輸入第一個一元多項式第%d項的係數,指數,輸入以後請按回車鍵\n",i+1);
scanf("%d %d",&xi,&zhi);
p=in(p,xi,zhi);
}
printf("第一個一元多項式是:\n");
out(head1);
printf("\n");
printf("請輸入第二個一元多項式的項數\n");
scanf("%d",&n);
linklist head2;
chu(head2);
linklist q=head2;
printf("請先輸入係數再輸入指數\n");
for(int i=0;i<n;i++)
{
printf("請輸入第二個一元多項式第%d項的係數和指數,輸入以後請按回車鍵\n",i+1);
scanf("%d %d",&xi,&zhi);
q=in(q,xi,zhi);
}
printf("第二個一元多項式是:\n");
out(head2);
printf("\n");
linklist head3;
chu(head3);
printf("合併後的一元多項式是:\n");
sum(head1,head2,head3);
dele(head1);
dele(head2);
out(head3);
}
如有更好的做法請多多指導!!!!