資料結構 一元多項式的表示及相加

2021-07-01 20:08:16 字數 3142 閱讀 9900

/*

typedef struct

float coef; //係數

int expn;   //指數

}term,elemtype;

//定義結構體 

typedef linklist polynomial; 

//用帶頭結點的有序鍊錶表示多項式

int cmp(term a,term b); 

//依a

的指數值

< = >b

的指數值。分別返回

-1 0 1 

status initlist(polynomial &p);

//構造空的線性鍊錶

position gethead(polynomial p);

//返回

p的頭結點 

status setcurelem(position h,term e);

//修改

h元素為e 

status locateelem(linklist p,elemtype e,position &q,int(*cmp)(elemtype,elemtype));

//返回是否存在該指數項 

status makenode(link &p,elemtype e);

//申請乙個結點 

status insfirst(linklist &p,link h,link s);

//插入 

void creatpolyn(polynomial &p,int m);

//輸入

m項的指數及係數,建立表示一元多項式的有序鍊錶p

position nextpos(link p);

//指向下一結點 

elemtype getcurelem(link p);

//返回數值 

status delfirst(linklist &l,link h,link &q);

//刪除當前結點 

void freenode(link &p);

//釋放p 

status listempty(linklist l);

//判斷

l是否是空鍊錶 

//連線

s剩餘結點到l 

void printpolyn(polynomial p);

//列印輸出一元多項式p 

status clearlist(linklist &l);

// 清空鍊錶

status destroypolyn(linklist &l);

// 銷毀線性鍊錶l,

l不再存在

void addpolyn(polynomial &pa,polynomial &pb);

// 多項式加法

:pa=pa+pb,

並銷毀一元多項式pb

*/

#include#include#define ok 1

#define error -1

#define false 0

#define true 2

typedef int status;

typedef structterm,elemtype; //定義結構體

typedef struct lnode*link,*position;

typedef structlinklist;

typedef linklist polynomial; //用帶頭結點的有序鍊錶表示多項式

int cmp(term a,term b)

else return error;}

position gethead(polynomial p)

status setcurelem(position h,term e)

status locateelem(linklist p,elemtype e,position &q,int(*cmp)(elemtype,elemtype))

if(!p||(cmp(p->data,e)==1))

else

} status makenode(link &p,elemtype e)

status insfirst(linklist &p,link h,link s)

void creatpolyn(polynomial &p,int m)

//if不存在,則生成新結點並插入

}} position nextpos(link p)

elemtype getcurelem(link p)

status delfirst(linklist &l,link h,link &q)

//if

else return false; //鍊錶空}

void freenode(link &p)

status listempty(linklist l)

//while

l.tail=s;

l.len+=i;

return ok;}

void printpolyn(polynomial p)

//while

printf("\n");}

status clearlist(linklist &l)

//while

free(q);

l.tail=l.head;

l.len=0;

}//if

return ok;}

status destroypolyn(linklist &l)

void addpolyn(polynomial &pa,polynomial &pb)

// 刪除多項式pa中當前結點

delfirst(pb,hb,qb);

freenode(qb);

qb=nextpos(hb);

qa=nextpos(ha);

break;

case 1: delfirst(pb,hb,qb); // 多項式pb中當前結點的指數值小

insfirst(pa,ha,qb);

ha=ha->next;

qb=nextpos(hb);

break;}}

if(!listempty(pb))

destroypolyn(pb); // 銷毀pb }

int main()

資料結構 一元多項式的表示及相加

本文所有 均為偽碼,僅闡述演算法基本思想 資料結構 清華大學出版社 一元多項式的表示採用鏈式儲存結構來實現,基本操作和鍊錶的合併類似。以下為演算法部分 typedef structterm,elemtype 兩個型別名 term用於本adt,elemtype為linklist的資料物件名 type ...

資料結構 一元多項式的表示及相加

用單鏈表儲存多項式的結點結構如下 struct polynode 1.兩個多項式中所有指數相同的項的對應係數相加,若和不為零,則構成 和多項式 中的一項 2.所有指數不相同的項 均復抄到 和多項式 中。1.若pa exp exp,則結點pa所指的結點應是 和多項式 中的一項,將結點pa插入在結點pc...

一元多項式的表示及相加

符號多項式的操作,已經成為表處理的典型用例。我們對多項式採用順序儲存結構,可以只儲存每項係數,指數隱含在係數的序號裡。在這種情況下,如果多項式的次數很高且變化很大,那麼便很難來確定順序儲存的最大長度,另外對記憶體空間也極為浪費。一般情況下,對於那些多項式的次數很高,但項數不多的多項式我們可以將一元n...