單鏈表實現多項式相加

2021-09-01 23:56:38 字數 2987 閱讀 2916

本程式使用鍊錶實現了兩個多項式的相加。

多項式的相加主要是考慮相加項的指數是否相同,如果相同則係數相加,指數不變。

本程式當中,實現該過程的思想為,在錄入乙個多項式所有項的係數和指數以後,使用鍊錶思想構造一條單鏈表,記作鍊錶a,結 點儲存項的係數和指數。依照此法,構建第二條多項式鍊錶,記作鍊錶b。這樣準備工作就完成了,下面開始實現多項式的相加,第一種方法(本程式採用第二種方法),構造第三條鍊錶(記作鍊錶c)用於儲存相加之後的多項式,開始從多項式a的第一項開始,依次對比自身項以及多項式b的項,找到與其指數相同的項,將他們的係數相加,再將得到的結果存入新產生結點存係數的資料域,同時複製指數到新產生結點存指數的資料域(第乙個結點作為鍊錶c的頭結點),對鍊錶a的第一項對比完成以後,再對比鍊錶a的第二項,查詢鍊錶a與鍊錶b有沒有與其指數相同的項,將相同項的係數相加,複製指數,再次存到新產生的新結點當中。再對比鍊錶a的第三項,第四項…第n項。對比鍊錶a完成以後,是否需要對比鍊錶b?答案是肯定的,因為鍊錶b裡也可能存在指數相同的項,但是在對比鍊錶b的項的時候是不用再對比鍊錶a的,因為鍊錶a對比完成以後,鍊錶b當中剩下的項的指數應該是與鍊錶a中所有項的指數都不相同,這些項當中可能存在指數相同的項,這些項是需要處理的。但是說到這裡,有乙個問題出現了,已經對比過的項該怎麼辦,不能再次進行對比後指數相同之後係數相加呀,所以我們需要去除對比之後的項,只有這樣才能做到不重複相加,當鍊表a和鍊錶b按照上述的方法進行對比以後,所有指數相同的項都會進行係數相加,連同指數一起存到鍊錶c當中,剩下的就是指數都不相同的項,對於這些項,我們只需要複製到鍊錶c當中即可。但是像這樣對兩條鍊錶進行操作,多少有點麻煩,如果我們一開始就將兩條鍊錶連成一條鍊錶呢,這就是我們下面要說的第二種辦法,當鍊表a和鍊錶b產生以後,我們立即將兩條鍊錶連成一條,然後再去進行所有項的指數進行對比,相同指數的項進行係數相加,直接複製到這些項的第一項,然後刪掉其他項,這樣做就避免了鍊錶c的建立,直接在合成鍊錶上進行操作,對比完成以後,該合成鍊錶就是鍊錶a和鍊錶b相加得到的鍊錶c,同時,在這條鍊錶上可能存在係數為零的項,這些項也是有必要去除的,那麼就再進行一次鍊錶c的遍歷,將所有係數為零的項刪掉就可以了,這樣就全部敘述完畢了,實現了鍊錶的相加。

程式執行效果圖:

("\n\n\t\t連線:");

disppoly

(ahead)

; q = ahead;

while

(q !=

null

) s = p;

p = p->next;

} q=q->next;

}printf

("\n\t\t相加處理:");

disppoly

(ahead)

; q = ahead;

//q指標回到開始

p = ahead;

//p指標回到開始

//s = ahead;

q = p;

while

(q !=

null

)else

} p = q;

q = q->next;

}printf

("\n\t\t去除零項:");

disppoly

(ahead);}

intmain()

;int b[max]

[num]=;

while(1

)else

}for

(int i =

0; i < anum; i++

)while(1

)else

}for

(int j =

0; j < bnum; j++

)createlist

(ahead,a,anum)

;printf

("\n\t\t原a多項式:");

disppoly

(ahead)

;createlist

(bhead,b,bnum)

;printf

("\n\t\t原b多項式:");

disppoly

(bhead)

;printf

("\n\t\t相加得到的c多項式");

add(ahead,bhead)

;printf

("\n\t\t");

destroylist

(ahead)

;return0;

}如有錯誤,歡迎指正!_

單鏈表實現多項式相加

include include struct node void destroypoly struct node poly 釋放實現多項式申請的空間 return struct node createnode int coe,int exp 申請空間存放多項式當前項 struct node crea...

單鏈表應用 多項式實現(C )

一般用兩個類,結點類linknode和鍊錶類list,協同表示單鏈表,主要有3種方式 class list class linknode class list class list linknode first class linknode class list public linknode te...

多項式相加

include include include typedef struct polyn pol 建立有序多項式 pol creatpolyn else if cnew expn clast expn else cnew pol malloc sizeof pol scanf d d cnew co...