在 [ 資料結構 小學堂 ] 陣列結構 : 矩陣與多項式 介紹過矩陣的多項式表示法, 不過使用矩陣表示多項式會有以下困擾 :
因為使用單向鏈結串列來表示多項式, 可以克服以上問題, 多項式的鏈結表示法主要是儲存非零項目, 並且每一項均符合以下資料結構 :
例如假設多項式有 n 個非零項目, 則可以表示成 :
另外關於多項式的加法在單向鏈結結構也相當簡單, 請參考下面代碼範例.
範例代碼 :
多項式相加的演算法範例 :
* List.h 代碼 :
- #include
- using namespace std;
- class List{
- public:
- int coef, exp;
- class List *next;
- };
- typedef class List ListNode;
- typedef ListNode *ListLink;
- ListLink createLink(int data[4]);
- void printLink(ListLink head);
- ListLink sumLink(ListLink a, ListLink b);
- #include "List.h"
- ListLink createLink(int data[4]){
- ListLink head, newnode, ptr;
- for(int i=0; i<4 ; i++) {
- newnode = new ListNode;
- if(!newnode){
- cout << "Error!! 記憶體配置失敗!!" << endl;
- exit(1);
- }
- if(i==0) {
- newnode->coef = data[i];
- newnode->exp = 3-i;
- newnode->next=NULL;
- head = newnode;
- ptr = head;
- } else {
- newnode->coef = data[i];
- newnode->exp = 3-i;
- newnode->next = NULL;
- ptr->next = newnode;
- ptr = newnode;
- }
- }
- return head;
- }
- void printLink(ListLink head) {
- while(head!=NULL) {
- if(head->exp==1 && head->coef!=0)
- cout << head->coef << "X + ";
- else if(head->exp!=0 && head->coef!=0)
- cout << head->coef << "X^" << head->exp << " + ";
- else if(head->exp==0 && head->coef!=0)
- cout << head->coef;
- head = head->next;
- }
- cout << endl;
- }
- ListLink sumLink(ListLink a, ListLink b){
- int i=0;
- int sum[4] = {0};
- ListLink ptr;
- while(a!=NULL || b!=NULL){
- if(a!=NULL && b != NULL && (a->exp == b->exp)) {
- sum[i] = a->coef + b->coef;
- i++;
- a = a->next;
- b = b->next;
- } else if((a!=NULL && b==NULL) || (a->exp > b->exp)) {
- sum[i] = a->coef;
- i++;
- a = a->next;
- } else if((a==NULL && b!=NULL) || (a->exp < b->exp)) {
- sum[i] = b->coef;
- i++;
- b = b->next;
- }
- }
- return createLink(sum);
- }
- void ch03_08() {
- ListLink a,b,c;
- int data1[] = {3,0,4,2}; // 多項式A的係數
- int data2[] = {6,8,6,9}; // 多項式B的係數
- cout << "原始多項式: " << endl << "A=" ;
- a = createLink(data1);
- b = createLink(data2);
- printLink(a);
- cout << "B=";
- printLink(b);
- cout << "多項式相加結果: \nC= ";
- c = sumLink(a, b);
- printLink(c);
- }
執行結果 :
補充說明 :
* [ 資料結構 小學堂 ] 鏈結串列 : 單向鏈結串列
沒有留言:
張貼留言