#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
float coef; //系数
int exp; //指数
struct Node *next;
}Node;
//根据多项式各项的系数和指数建立链表,返回头指针
Node * Create(int n)
{
Node *head,*s,*rear;
int i;
head=(Node *)malloc(sizeof(Node));
head->next=NULL;
rear=head;
for(i=1;i<=n;i++)
{
s=(Node *)malloc(sizeof(Node));
printf("输入第%d项的系数和指数:",i);
scanf("%f %d",&s->coef,&s->exp);
rear->next=s;
rear=s;
}
rear->next=NULL;
return head;
}
//输出链表中的数据元素
void display(Node *head)
{
Node *p;
p=head->next;
while(p)
{
printf("(%.1f,%d)",p->coef,p->exp);
p=p->next;
}
printf("\n");
}
//两个多项式相加,返回和多项式链表的头指针
Node *addPolyn(Node *head1,Node *head2)
{
Node *p,*q,*head,*rear,*s;
int temp;
float sum;
p=head1->next;
q=head2->next;
head=(Node *)malloc(sizeof(Node));
rear=head;
while(p&&q)
{
if(p->exp==q->exp)
temp=0;
else if(p->exp<q->exp)
temp=1;
else
temp=-1;
switch(temp)
{
case 0:
{
sum=p->coef+q->coef;
if(sum!=0.0)
{
s=(Node *)malloc(sizeof(Node));
s->coef=sum;
s->exp=p->exp;
rear->next=s;
rear=s;
}
p=p->next;
q=q->next;
break;
}
case 1:
{
s=(Node *)malloc(sizeof(Node));
s->coef=p->coef;
s->exp=p->exp;
rear->next=s;
rear=s;
p=p->next;
break;
}
case -1:
{
s=(Node *)malloc(sizeof(Node));
s->coef=q->coef;
s->exp=q->exp;
rear->next=s;
rear=s;
q=q->next;
break;
}
}
}
while(p)
{
s=(Node *)malloc(sizeof(Node));
s->coef=p->coef;
s->exp=p->exp;
rear->next=s;
rear=s;
p=p->next;
}
while(q)
{
s=(Node *)malloc(sizeof(Node));
s->coef=q->coef;
s->exp=q->exp;
rear->next=s;
rear=s;
q=q->next;
}
rear->next=NULL;
return head;
}
void main()
{
Node *h1,*h2,*h;
int m,n;
printf("输入第一个多项式的项数:\n");
scanf("%d",&m);
h1=Create(m);
display(h1);
printf("输入第二个多项式的项数:\n");
scanf("%d",&n);
h2=Create(n);
display(h2);
printf("输出和多项式的系数和指数:\n");
h=addPolyn(h1,h2);
display(h);
}
数据结构-C语言实现一元二次项
最新推荐文章于 2022-11-10 14:00:11 发布