数据结构 线性表(一元多项式的相加)C语言实现

基于c语言实现,为了使用&引用,引入了c++头文件

源代码

#include <iostream>
#include <stdlib.h>

typedef struct Polynode{
    
    
	int coef,exp;
	struct Polynode *next;
}Polynode,*Polylist; 

Polylist Polycreate(int n);
void AddPolyn(Polylist pa,Polylist pb,Polylist &pc);
void PrintPolyn(Polylist L,int n);

int main(int argc, char** argv) 
{
    
    
	int n,m; 
	Polylist pa,pb,pc;
	printf("请输入pa链表元素的个数:\n");
	scanf("%d",&n);
	printf("请输入pa链表的底数和指数:\n");
	pa=Polycreate(n);
	PrintPolyn(pa,n);
	printf("请输入pb链表元素的个数:\n");
	scanf("%d",&m);
	printf("请输入pb链表的底数和指数:\n");
	pb=Polycreate(m);
	PrintPolyn(pb,m);
	printf("两个多项式相加后的结果为:\n");
	AddPolyn(pa,pb,pc);
	PrintPolyn(pc,n+m); 
	return 0;
}

void PrintPolyn(Polylist L,int n)
{
    
    
	Polylist p;
	int i=0;
	p=L->next;
	while(p && i<n)
	{
    
    
		i++;
		printf("(%d,%d)  ",p->coef,p->exp);
		p=p->next;
	}
	printf("\n");
}

Polylist Polycreate(int n)
{
    
    
	Polylist head,rear,s;
	int c=1,e,i=1;
	head=(Polylist)malloc(sizeof(Polynode));
	rear=head;
	while(c!=0 && i<=n)
	{
    
    
		i++;
		scanf("%d,%d",&c,&e);
		s=(Polylist)malloc(sizeof(Polynode));
		s->coef=c;
		s->exp=e;
		rear->next=s;
		rear=s;
	}
	rear->next=NULL;
	return head;
}

void AddPolyn(Polylist pa,Polylist pb,Polylist &pc)
{
    
    
	int sum=0;
	Polylist r,Lc;
	pc=Lc=pa;
	pa=pa->next;
	pb=pb->next;
	
	
	while(pa!=NULL && pb!=NULL)
	{
    
    
		if(pa->exp<pb->exp)
		{
    
    
			Lc->next=pa;
			Lc=pa;
			pa=pa->next;
		}
		else if(pa->exp==pb->exp)
		{
    
    
			sum=pa->coef+pb->coef;
			if(sum!=0)
			{
    
    
				pa->coef=sum;
				Lc->next=pa;
				Lc=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);
			}
		}
		else
		{
    
    
			Lc->next=pb;
			Lc=pb;
			pb=pb->next;
		}
	}
	Lc->next=pa?pa:pb;
	
}

运行截图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44635198/article/details/112912230
今日推荐