1. 程式人生 > >多項式相加減

多項式相加減

單鏈表多項式的相加減

#include<cstdio>
#include<iostream>
using namespace std;
typedef struct pnode{
	int a;                  //係數 
	int na;                 //指數 
	struct pnode *next;   //指標域 
}pnode,*plist; 
void creatlist(plist &L,int n)
{
	plist s,pre,q,star;
	L=new pnode;
	L->next=NULL;    //先建立一個帶頭結點的空連結串列
	star=L ;        
	for(int i=1;i<=n;i++)  //輸入多項式 
	{
		s=new pnode;
		cin>>s->a>>s->na;        //輸入係數以及指數 
		pre=L;                   //插入s   的前驅位置 
		q=L->next;               //插入s   的後驅位置 
		while(q&&q->na<s->na)
		{
			//找出s的合適位置,使多項式有序輸出 
			pre=q;
			q=q->next;
		}
		s->next=q;
		pre->next=s;
		if(s->a==0&&s->na==0)break;     //如果係數、指數為0,結束輸入 
	 }
	 	star=L->next;                   //star指向連結串列的首元結點 
	 	
	 	/******輸出寫入的多項式******/ 
	while(star->next)
	{
		printf("%dx^%d+",star->a,star->na);
		star=star->next;
	} 
	printf("%dx^%d\n",star->a,star->na);
}
void dxs(plist &L1,plist &L2)
{
	//三種情況(1、合併項為0   2、L2多項式的項小於對應的L1的項    3、 L2多項式的項大於對應的L1的項 
	 plist p,p1,p2,star,c;
	 int sum;
	 p1=L1->next;
	 p2=L2->next;
	 p=L1;
	 c=L1;
	 while(p1&&p2)
	 {
	 	if(p1->na==p2->na)  //p1元素的項與p2元素對應的項相等,求和 
	 	{
	 		sum=p1->a+p2->a;
	 		if(sum!=0)       //和不為0.將和式鏈入合併表 ,p1\p2指向下一結點 
	 		{
	 			p1->a=sum;
	 			p->next=p1;
	 			p=p1;
	 			p1=p1->next;
	 			p2=p2->next;
			 }
			 else           //和為0. p1\p2指向下一結點 
			 if(sum==0)
			 {
			 	p1=p1->next;
			 	p2=p2->next;
			 }
		 }
		 else      //(P1多項式的項小於對應的P2的項 (把P1的這一項鍊入合併項,並且P1指向下一個結點) 
		 if(p1->na<p2->na)
		 {
		 	p->next=p1;
		 	p=p1;
		 	p1=p1->next;
		 }
		 else   //P1多項式的項大於對應的P2的項 (把P2的這一項鍊入合併項,並且P2指向下一個結點) 
		 {
		 	p->next=p2;
		 	p=p2;
		 	p2=p2->next;
		 }
	 }
	 p->next=p1?p1:p2;     //把兩個多項式多餘的鏈 鏈進來 
	 star=c->next;
	 /******輸出合併後的多項式(注意格式,先不輸出最後一項)******/
	 while(star->next)        
	 {
	 	printf("%dx^%d",star->a,star->na);  
	 	star=star->next;
	 }
	 printf("%dx^%d\n",star->a,star->na);   //最後一項 
}
int main()
{
	plist L1,L2;
	int n,m;
	printf("輸入兩個多項式項元素個數:");
	cin>>n>>m;
	creatlist(L1,n);
	creatlist(L2,m);
	printf("合併後為:\n");
	dxs(L1,L2);

	
}