稀疏多項式的順序儲存結構實現

2021-08-15 13:14:12 字數 2695 閱讀 3954

題目摘自資料結構題集(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...