1. 程式人生 > >線性表的應用:一元多項式的建立與輸出

線性表的應用:一元多項式的建立與輸出

在表處理時時常遇到多項式的表示和運算問題,因此有必要建立多項式資料結構一般的,我們使用單鏈表來實現一元多項式。每個節點是多項式中的一項,其中儲存了該項的係數和指數。

多項式的結構定義如下:

typedef struct node{
	int coef;				//係數
	int exp;			        //指數
	struct  node *next;                     //連線指標
}Term,*List;

具體實現程式碼如下:

#include<iostream>
#include<math.h>
using namespace std;
#define MAXSIZE 20
typedef struct node{			        //多項式結構體 
	double coef;				//係數
	int exp;			        //指數
	struct  node *next;                     //連線指標
}Term,*List;

struct node *Create(List L)		        //多項式建立函式 
{
	double C[MAXSIZE];			//儲存多項式的係數 
	int E[MAXSIZE]; 			//儲存多項式的指數
	int i,n;
	
	cout<<"請輸入多項式的項數!!!"<<endl; 					
	cin>>n; 
	List p,tail;
	p=L=tail=new Term;
	
	cout<<"請輸入多項式每項的係數和指數,按降冪輸入資料!!!"<<endl;
	cout<<"請輸入多項式第1"<<"項的係數和指數;"<<endl; 
	cin>>p->coef>>p->exp;
	C[0]=p->coef;
	E[0]=p->exp;
	for(i=1;i<n;i++)
	{
		tail->next=p;
		tail=p;
		
		p=new Term; 
		cout<<"請輸入多項式第"<<i<<"項的係數和指數;"<<endl; 
		cin>>p->coef>>p->exp;
		C[i]=p->coef;
		E[i]=p->exp;		
	}
	tail->next=NULL;
	return L;
}

void ShowList(List L)
{
	List p;
	p=L;
	cout<<"多項式如下:"<<endl;
	bool mark=1;				//標識是否為多項式的首項 
	
	while(p)
	{
		if(mark==1)			//如果是多項式首項,特殊處理 
		{
			if(p->exp<0)
				cout<<"f(x)=-";
			else
				cout<<"f(x)=";
			mark=0;
		}
		else
		{
			if(p->coef>0)		//輸出多項式的符號 
				cout<<"+";
			else
				cout<<"-";
		}
		
		if(fabs(p->coef) !=1 || p->exp == 0)//輸出多項式的係數 
			cout<<fabs(p->coef);	//fabs是求絕對值函式 
		switch(p->exp)
		{
			case 0:break;
			case 1:cout<<"X"; break;
			default :cout<<"X^"<<p->exp; break;
		}
		
		p=p->next;
	}
	cout<<endl; 
	cout<<"輸出成功!!!"<<endl;
}

int main()
{
	List L1,L2,L3;
	while(1)
	{
		int n;
		cout<<"***************************"<<endl;
		cout<<"\t1.建立多項式!!!"<<endl;
		cout<<"\t2.輸出多項式!!!"<<endl;
		cout<<"\t3.退出程式!!!"<<endl; 
		cout<<"***************************"<<endl;		
		cout<<"請輸入功能選項:"<<endl;
		cin>>n;
		switch(n)
			{
				case 1:
				{
					cout<<"正在建立多項式!!!"<<endl; 
					L=Create(L);
					break;
				}
				case 2:
					{
						ShowList(L);
						break;
					}
				case 3:
					{
						cout<<"程式退出成功!!!"<<endl;
						return 0;
						break;
					}
			}
	}
}