題目摘自資料結構題集(c語言版) p20 algo2.39-2.40
稀疏多項式的順序儲存結構sqpoly定義如下:
typedef struct polyterm;
typedef struct
sqpoly;
2.39已知稀疏多項式2.40 條件同2.39,編寫求p(x)=pn1(x)-pn2(x)的演算法,將結果多項式存放在新闢的空間中,並分析你的演算法的時間複雜度。
思路分析:2.39-從頭遍歷到表尾,x的指數次就是乙個階乘,不用另外的函式,直接寫在演算法中會更加節省時間。
2.40-類似於表的merge演算法,這裡指數是從大到小排列的(我是從小到大輸入的,遞增遞減不影響結果),不需要考慮排序,設定兩個指標,兩個計數器i,j,遍歷a,b表,迴圈條件i,j均小於各自表長。
按照exp大小分成兩種情況,若不等,將指數更小的結點加入c中,該指標移位,若相等,計算新的coef,同時移位兩個指標,並將新的coef,寫入c中。(注意一下,a先遍歷完的情況,因為是a-b,負號)
#pragma once
#define true 1
#define ok 1
#define false 0
#define error 0
#define overflow -1
typedef int status;
#pragma once
#include "status.h"
#define initsize 100
typedef struct polyterm;
typedef struct
sqpoly;
status init(sqpoly &l);
status makepoly(sqpoly &l);
double substitute(sqpoly l, int x);
status print_poly(sqpoly l);
status subtract(sqpoly la, sqpoly lb, sqpoly &lc);
#define _crt_secure_no_warnings
#include #include #include "sqpoly.h"
#include "status.h"
status init(sqpoly &l)
//init
status makepoly(sqpoly &l)
} printf("poly init succeed!\n");
return ok;
}//makepoly
status print_poly(sqpoly l)
polyterm *p = l.e;
int count = 0;
while (countcoef, p->exp);
p++;
count++;
} while (getchar() != '\n');
putchar('\n');
return ok;
}double substitute(sqpoly l,int x)
polyterm *p = l.e;
int count = 0;
double sum = 0;
while (countcoef;
int exp = p->exp;
long int a = 1;
int i = 0;
if (exp == 0)
a = 1;
else
while (iexp < pb->exp)
else
if (pa->exp > pb->exp)
else
}while (icoef = pa->coef;
pc->exp = pa->exp;
i++; lc.length++;
} while (jcoef = -pb->coef;
pc->exp = pb->exp;
j++; lc.length++;
} return ok;
}
2.39
#define _crt_secure_no_warnings
#include #include #include"sqpoly.h"
#include "status.h"
int main(void)
system("pause");
return 0;
}//main
執行結果
執行結果
稀疏多項式的運算
問題描述 已知稀疏多項式pn x c1x e1 c2x e2 cmx em,其中n em em 1 e1 0 ci 0,m 1.試採用儲存量同多項式項數 m成正比的順序儲存結構,編寫求 pn x0 的演算法 x0為給定值 並分析你的演算法的時間複雜度。問題分析 多項式的順序儲存結構為 typedef...
單鏈表 稀疏多項式的表示
稀疏多項式 如p x 1 3x1000 x20000 q x x x50000 r x 1 x 3x1000 x20000 x50000。數學模型 p 1,0 3,1000 1,20000 q 1,1 1,50000 r 1,0 1,1 3,1000 1,20000 1,50000 乙個基礎元素稱為...
多項式的實現
在實現上述鍊錶之後,我們自己動手完成乙個習題,就是利用鍊錶實現多項式的相加,這個就比較簡單,這裡可要自己動手寫,我也是完全自己寫的。include using namespace std typedef struct lnode lnode,linklist void initexpn linkli...