利用單鏈表實現多項式相加

用鏈表實現多項式相加的優點(相比於順序表實現):

  1. 無需分配額外的空間,空間複雜度低
  2. 插入和刪除操作方便

用鏈表實現多項式相加的具體代碼如下:

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

using namespace std;

typedef int ElemType;
typedef int Status;

#define OK 1
#define ERROR 0

typedef struct PNode{
	float coef;//多項式係數
	int index;//多項式指數
	struct PNode *next; 
}PNode,*Polynomial;

//初始化多項式 
Status InitPolyn(Polynomial &p){
	p=new PNode;
	if(!p) return ERROR;
	p->next=NULL;
	return OK;
}

//創建多項式(尾插法) 
void CreatePolyn(Polynomial &p,int n){
	PNode *l=p;
	for(int i=0;i<n;i++){
		PNode *q=new PNode;
		q->next=NULL;
		cout<<"請輸入多項式係數:";
		cin>>q->coef;
		cout<<"請輸入多項式指數:";
		cin>>q->index;
		l->next=q;
		l=q;
	}
}

//多項式相加(以La作爲相加後的多項式鏈表的頭節點) 
void AddPolyn(Polynomial &La,Polynomial &Lb){
	PNode *pa=La->next;
	PNode *pb=Lb->next;
	PNode *pc=La;
	PNode *temp_pa=NULL;
	PNode *temp_pb=NULL;
	while(pa&&pb){
		//當指數相等時,比較係數 
		if(pa->index==pb->index){
			//若係數相加爲0,則將pa,pb均後移一位,並銷燬它們之前指向的節點,pc保持不變 
			if(!(pa->coef+pb->coef)){
				temp_pa=pa;
				temp_pb=pb;
				pa=pa->next;
				pb=pb->next;
				delete temp_pa;
				delete temp_pb;
			}
			//若係數相加不爲0,則將指數相加的結果保存在pa,並先將pa賦值給pc->next,再將pa賦值給pc;之後,pa,pb均後移,並銷燬pb之前指向的節點
			else{
				pa->coef=pa->coef+pb->coef;
				pc->next=pa;
				pc=pa;
				pa=pa->next;
				temp_pb=pb;
				pb=pb->next;
				delete temp_pb;
			}
		}
		//若pa係數小於pb係數,則先將pa賦值給pc->next,再將pa賦值給pc;之後pa後移一位,pb不變 
		else if(pa->index<pb->index){
			pc->next=pa;
			pc=pa;
			pa=pa->next;
		}
		//若pb係數小於pa係數,則先將pb賦值給pc->next,再將pb賦值給pc;之後pb後移一位,pa不變
		else{
			pc->next=pb;
			pc=pb;
			pb=pb->next;
		}
	}
	//循環結束後,若pa未到達表尾,則將pa所指節點插入到"和多項式"鏈表中;pb同理 
	pc->next=pa?pa:pb;
	//銷燬Lb 
	delete Lb;
}

//遍歷多項式並打印出其中的係數和指數 
Status ShowPolyn(Polynomial p){
	PNode *q=p->next;
	if(!q) return ERROR;;
	while(q){
		cout<<"多項式係數爲:"<<q->coef<<endl;
		cout<<"多項式指數爲:"<<q->index<<endl;
		q=q->next;
	}
	return OK;
}

int main(){
	Polynomial La,Lb;
	InitPolyn(La);
	CreatePolyn(La,3);
	InitPolyn(Lb);
	CreatePolyn(Lb,4);
	AddPolyn(La,Lb);
	ShowPolyn(La);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章