線性表的應用:一元多項式的建立與輸出
阿新 • • 發佈:2019-02-06
在表處理時時常遇到多項式的表示和運算問題,因此有必要建立多項式資料結構。一般的,我們使用單鏈表來實現一元多項式。每個節點是多項式中的一項,其中儲存了該項的係數和指數。
多項式的結構定義如下:
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; } } } }