一元多項式的加減 c語言鍊錶實現

2021-10-07 08:56:21 字數 3800 閱讀 2249

1.題目

實現一元多項式的加減法運算,要求多項式採用鍊錶儲存結構。

2.測試用例

(1)a(x)=3x^1000 +7x^3-2x+1

b(x)=x^99 -x^3+2x+8

加法運算結果:

c(x)=9.00 +6.00x^3 +1.00x^99 +3.00x^1000

減法運算結果:

d(x)=-7.00 -4.00x+8.00x^3 -1.00x99+3.00x1000

(2)a(x)= 3x^5 +7x^3+1

b(x)=9x^6 -7x3+4x2+5x-1

加法運算結果:

c(x)= 5.00x+4.00x^2 +3.00x^5 +9.00x^6

減法運算結果:

d(x)=2.00 -5.00x-4.00x^2 +14.00x^3 +3.00x^5 -9.00x^6

(3)a(x)= 3x^5 +7x^3+1

b(x)=-3x^5 -7x^3-1

加法運算結果:

c(x)=0

減法運算結果:

d(x)=2.00 +14.00x^3 +6.00x^5

(4)a(x)=0

b(x)=1

加法運算結果:

c(x)=1.00

減法運算結果:

d(x)=-1.00

(5)a(x)=x^4 +x^2+1

b(x)=x^5 +x^3 -x^2+1

加法運算結果:

c(x)=2.00 +1.00x^3 +1.00x^4 +1.00x^5

減法運算結果:

d(x)=2.00x^2 -1.00x^3 +1.00x^4 -1.00x^5

3演算法描述

(1)一元多項式的儲存

採用鍊錶來儲存多項式。考慮到多項式習慣用降冪排列,因此建立多項式時,進行乙個排序。

(2)一元多項式的建立

建立一元多項式,分別輸入每一項的係數和指數。

(3)一元多項式的加減法

兩個多項式進行加減法運算時,建立乙個新的鍊錶,把結果存在裡面要注意當係數之和或之差為0時,將結點刪除。

4驗證演算法對測試用例的操作步驟

以a(x)=x^4 +x^2 +1、b(x)=x^5 +x^3- x^2+1的加法為例,說明演算法操作的步驟。

1)建立鍊錶,將多項式儲存,鍊錶中儲存多項式係數和指數。

2)對多項式進行排序,按照公升冪的次序將多項式中每一項進行排序。

3)分別輸出兩個多項式。

4)對兩個多項式分別進行加法和減法運算。進行加減法運算時,若指數想相同,則將係數相加減,若指數不同,則新建立節點,儲存資料,注意:當係數為0時,將該節點刪除,即該項為0。

5)輸出兩個多項式加減法的運算結果。

建立第乙個鍊錶儲存a(x),

係數(ratio) 指數(index) 位址(next)

1 4

1 2

1 0 null

建立第二個鍊錶儲存b(x),

係數(ratio) 指數(index) 位址(next)

1 5

1 3

-1 2

1 0 null

利用排序函式將兩鍊錶進行排序

排序結果如下

係數(ratio) 指數(index) 位址(next)

1 0

1 2

1 4 null

多項式a(x):

多項式b(x):

係數(ratio) 指數(index) 位址(next)

1 0

-1 2

1 3

1 5 null

對兩多項式進行加減法運算:

加法運算的結果如下:

係數(ratio) 指數(index) 位址(next)

2 0

0 2

1 3

1 4

1 5 null

對於係數為0的項,要將其刪除,結果如下:

係數(ratio) 指數(index) 位址(next)

2 2

-1 3

1 4

-1 5 null

得到加減法運算的結果,輸出運算結果即可。

#include

#include

static

struct poly *head1,

*head2;

struct poly

;//建立鍊錶,index儲存指數,ratio儲存係數

struct poly *

creat()

for(t=head->next; t!=

null

; t=t->next)}if

(flag==0)

}return head;};

//輸入資料,在輸入時,可能存在輸入兩次相同係數的資料,此時將兩組資料合併

struct poly sort

(struct poly *head)

temp1=temp1->next;

} temp2=temp1;

temp1=head->next;}}

;//將多項式進行排序,以符合我們通常狀態下公升冪的次序

struct poly add

(struct poly *head1,

struct poly *head2)

}//求和時,若head1為空,則直接將head2複製到新結果中去

else

if(q==

null)}

//若head2為空,則將head1複製到結果中去

}else

else

if(p->index>q->index)

else

else}}

//若head1和head2都不為空,則按照公升冪的次序將其排序相加,係數為0的項不需要,注意,一定要按照次序來,少使用排序函式

}print

(head);}

;//對兩多項式進行求和,求和結果儲存在另乙個結構體中

struct poly sub

(struct poly *head1,

struct poly *head2)

}else

if(q==

null)}

}else

else

if(p->index>q->index)

else

else}}

}print

(head);}

;//多項式求差,與求和同理

void

print

(struct poly *head)

//多項式的輸出,若多項式為null則直接輸出0

while

(temp!=

null

)else

printf

(" ");

}//在輸出第一項時,係數為正,直接輸出,係數為負,也直接輸出

else

else

printf

(" ");

}else

else

printf

(" ");

}//之後的每一項中,係數為正,則加上正號,即加號,係數為負,可直接輸出

} temp=temp->next;

}printf

("\n");

};intmain()

temp=head2;

while

(temp!=

null

)//釋放空間

return0;

}

一元多項式加法鍊錶實現

使用鍊錶實現一元多項式加法 並使用已有鍊錶返回運算結果 一元多項式求和 void sumlist slist a,slist b else output m output n t m next while m next null n next null else if m next exp n ne...

鍊錶實現一元多項式相加

c 鍊錶實現一元多項式相加 如下 輸入多項式按次數從高到低排列 include include using namespace std intmain 定義節點型別,coe表示x前的係數,order表示x的次數 int coe,order int i int nodenuma 多項式a的項數 pri...

一元稀疏多項式加減

一元稀疏多項式加減 include include include define ok 1 define error 0 typedef int status typedef struct pnodepnode,polynomial 建立乙個多項式鍊錶 status creatpolynnomial...