一元多项式相加|数据结构

在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>

typedef struct pnode
{
	float coef;
	int exp;
	pnode* next;
}polynode;

int main()
{
	polynode *a,*b,*c;
	polynode* CREATELIST_R(int n);
	void OUT(polynode *head);
	polynode* POLYADD(polynode *A,polynode *B);
	
	a=CREATELIST_R(3);
	OUT(a);
	b=CREATELIST_R(5);
	OUT(b);
	c=POLYADD(a,b);
	OUT(c);
	return 0;
}

void INSERT_AFTER(polynode *p,float cc,int ee)
{
	polynode* s;
	s=(polynode *)malloc(sizeof(polynode));
	s->coef=cc;
	s->exp=ee;
	s->next=p->next;
	p->next=s;
}


polynode *CREATELIST_R(int n)
{
	polynode *head,*r;
	int i;
	float cc;
	int ee;

	head=(polynode *)malloc(sizeof(polynode));
	head->exp=-1;
	head->next=NULL;
	r=head;
	for(i=1;i<=n;i++)
	{
		printf("input (coef,exp):\n");
		scanf("%f %d",&cc,&ee);
		INSERT_AFTER(r,cc,ee);
	}
	return head;
}

void OUT(polynode *head)
{
	polynode *p;
	p = head->next;
	while(p)
	{
		printf("%fx^%d  ",p->coef,p->exp);
		p=p->next;
	}
	printf("\n");
}

polynode * POLYADD(polynode *A,polynode *B)
{
	polynode *pa,*pb,*pc;
	polynode *C;
	polynode *r;
	float sum;
	C=A;
	pa=A->next;
	pb=B->next;
	pc=C;

	while(pa&&pb)
	{
		if((pa->exp) < (pb->exp))
		{
			pc->next=pa;
			pc=pa;
			pa=pa->next;
		}
		else if((pa->exp) > (pb->exp))
		{
			pc->next=pb;
			pc=pb;
			pb=pb->next;
		}
		else
		{
			sum=pa->coef+pb->coef;
			if(sum)
			{
				pa->coef=sum;
				pc->next=pa;
				pc=pa;
				pa=pa->next;
				r=pb;
				pb=pb->next;
				free(r);
			}
			else
			{
				r=pa;
				pa=pa->next;
				free(r);

				r=pb;
				pb=pb->next;
				free(r);
			}
		}

	}
	if(pa)
		pc->next=pa;
	else
		pc->next=pb;
	free(B);
	return C;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值