生成两个多项式PA PB,求PA和PB之和,输出 “和多项式”

生成两个多项式PA PB,求PA和PB之和,输出 “和多项式” 

/*
生成两个多项式PA PB,求PA和PB之和,输出 “和多项式” 
*/
//#include <iostream>
//using namespace std;

#include <stdio.h>
#include <malloc.h>//包含 malloc 申请动态空间 函数 
//结构体 
typedef struct PNode
{
    double coef;            //系数
    int expn;              //指数
    struct PNode *next;    //指针域
}PNode,*Plink;
 
//构建 单链表 
Plink generate_polynomial()
{
	printf("build star: \n");
	PNode *q,*p1,*head;
	
	// 注意 按降幂 次序 输入!!! 方便 后面 比对 指数,省去 归并 链表的 按指数 排序 这一步骤 
	
	p1 = (PNode *)malloc(sizeof(PNode));//申请第一个 元素的空间 
	scanf("%lf%d",&p1->coef,&p1->expn);//输入 系数 指数 
    printf("系数/指数:%.2lfx^%d\n",p1->coef,p1->expn);
	
	head = p1;//保存 首结点地址 ,这个 指针始终 指向首结点 
	
	while(1)
	{

		//造 q结点 
		q = (PNode *)malloc(sizeof(PNode));//申请元素的空间 
		scanf("%lf",&q->coef);//输入 系数 
		q->next = NULL;
		if(q->coef == 0)//判断 系数为 结束 标志 
		{
			free(q);
			break;
		}
		
		scanf("%d",&q->expn);//输入 指数 
		
		if(q->expn == 0)//结束 标志 
		{
			printf("系数/指数:%.2lf\n",q->coef);
		}
		else
			printf("系数/指数:%.2lfx^%d\n",q->coef,q->expn);
		
		//连接 q结点 
		p1->next = q;
		p1 = q;
		q = q->next;
	}
	printf("end\n");
	return head;
}


//当两个多项式 底数一样 时 都为 x 
void add_polynomial(PNode *p1,PNode *p2)
{
    PNode *q1 = p1,*q2 = p2;//局部 指针 防止 修改原 首结点指针 
	while(q1 != NULL && q2 != NULL)
    {
    	if(q1->expn == q2->expn)
		{
			printf("%.2lfx^%d ",q1->coef + q2->coef,q1->expn);
			q1 = q1->next;
			q2 = q2->next;
		}
		else if(q1->expn > q2->expn)
		{
			printf("%.2lfx^%d ",q1->coef,q1->expn);
			q1 = q1->next;
		}
		else
		{
			printf("%.2lfx^%d ",q2->coef,q2->expn);
			q2 = q2->next;
		}
	}
	
	if(q1 == NULL)
	{
		while(q2 != NULL)
		{
			printf("%.2lfx^%d ",q2->coef,q2->expn);
		    q2 = q2->next;
		    
		}
	}
	
	else if(q2 == NULL)
	{
		while(q1 != NULL)
		{
			printf("%.2lfx^%d ",q1->coef,q1->expn);
			q1 = q1->next;
		}
	}
	
	return;
}

void release_link(PNode *head)
{
	PNode *q,*p;
	q = p = head;
	while(q->next != NULL)
	{
		p = q->next;
		q->next = q->next->next;
		free(p);
	}
	free(head);
}

int main()
{
	PNode *head1,*head2;
	
	//输入 生成 两个 多项式 
	head1 = generate_polynomial();
	head2 = generate_polynomial();
	
	add_polynomial(head1,head2);//多项式 相加 
	
	//释放 两个链表 空间 
	release_link(head1);
	release_link(head2);
	
	return 0;
}

 

おすすめ

転載: blog.csdn.net/qq_47991812/article/details/121324860
おすすめ