万分感谢。请问这样一个c语言的链表多项式加法。怎么能让输入的数自动按指数排列?
#include<stdio.h>#include<malloc.h>
#include<conio.h>
typedef struct node
{
int xi;
int zi;
struct node *next;
}
Node;
Node *Creat()
{
Node *head,*p,*pre;
int a,b;
head=(Node *)malloc(sizeof(Node));
head->next=NULL;
pre=head;
printf("请按照指数从小到大输入多项式并以0 0结束:\n");
printf("输入系数");
scanf("%d",&a);
printf("输入指数");
scanf("%d",&b);
while(a)
{
p=(Node *)malloc(sizeof(Node));
p->xi=a;
p->zi=b;
p->next=pre->next;
pre->next=p;
pre=p;
printf("输入系数");
scanf("%d",&a);
printf("输入指数");
scanf("%d",&b);
}
if(a==0&&b==0)
printf("\n输入结束:\n");
return head;
}
void Read(Node *head)
{
Node *p=head->next;
while(p)
{
printf("%d*x^%d ",p->xi,p->zi);
p=p->next;
}
}
Node *Add(Node *head1,Node *head2)
{
Node *p,*head,*p1,*p2;int sum;
head=(Node *)malloc(sizeof(Node));
p=head;
p1=head1->next;
p2=head2->next;
while(p1&&p2)
{
if(p1->zi==p2->zi)
{
sum=p1->xi+p2->xi;
if(sum)
{
p1->xi=sum;
p->next=p1;
p=p1;
}
p1=p1->next;
p2=p2->next;
}
else
{
if(p1->zi<p2->zi)
{
p->next=p1;
p=p1;
p1=p1->next;
}
else
{
p->next=p2;
p=p2;
p2=p2->next;
}
}
}
if(p1) p->next=p1;
else p->next=p2;
return head;
}
void main()
{
Node *head,*p1,*p2;
p1=Creat();
Read(p1);
p2=Creat();
Read(p2);
head=Add(p1,p2);
printf("相加后为:\n");
Read(head);
getch();
}
说一说实现方法。谢谢各位 ,最好大家不忙的话可以帮我写一段,就是写上面的一段然后我对照着把下面的一个多项式也写一次。