一元多項式我們在本子上可以說是手到拈來,但是在電腦上用語言敲出來,估計這會讓很多人頭疼,比如下面的多項式
y1 = 9x^1 + 4x^3 + 6x^4
y2 = 2x^3 + 4x^4 + 3x^7 + 3x^8
yz = y1 + y2 ;
效果圖
建立乙個結構體,裡面只存連個數,乙個是係數data,乙個是次冪,至於x就不用存了,只在列印的時候寫上就ok了,
然後寫插入操作,注意一定要是有序的,方便在後期相加
兩個多項式相加就是合併,我們可以按照順序兩兩比較,先拿y1的第乙個數和y2第乙個比較,如果y1>y2,則把y2新增到yz,相反之,如果y1=y2則相加係數,按照y1(也可y2)加入yz,等全都比較過後,如果y1(y2)還有項的話,就把剩下的全都載入到yz中,其實就是直接把next指向y1(y2)即可。
定義乙個結構體型別
在slinkonez呼叫變數是,都是
l->data;l->next;的形式
typedef structslinkone slinkone, *slinkonez;
/**c * 初始化
* */
slinkonez initlink()
l->next =null;
return
l;}
/*注意:我在這裡面加入了幾個判斷,乙個是當p->next ==null時,後面的加號就不要了,如果次冪==0的話那就只列印係數,當然如果係數==0,那就不列印,下方並未給出。* * 插入
* */
int insertlink(slinkonez &l, int pos, int e, int
cimi)
if (!p || i > pos-1
)
//建立乙個新的結點,並賦值
slinkonez s = (slinkonez) malloc(sizeof
(slinkone));
s->data =e;
s->cimi =cimi;
s->next = p->next;
p->next =s;
printf(
"插入成功\n");
return0;
}
/*注意:pz = p1;//往下走乙個,這句話其實就相當於 pz = pz->next;* * 列印全部資料
* */
void
printl(slinkonez l)
while
(p)
else
else
}p = p->next;
}printf("\n
");}
下面的全部**實現都是在我上面說的思路上一一對應的,只要有思路,問題就已經解決了一半了,
/** * 合併
* */
slinkonez mergelink(slinkonez &lz, slinkonez &l1, slinkonez &l2)
else
if (p1->cimi > p2->cimi)
else
p1=p1->next;
p2=p2->next;}}
if (p1!=null)
if (p2!=null)
return
lz;}
int完main()
資料結構與演算法 陣列(一)
資料結構與演算法是計算機發展的基石,現代計算機的起源是數學,數學的核心是演算法,計算機歷史上每一次大的變革都離不開演算法的推動。縱然 條條大路通羅馬 但好的演算法永遠比提高硬體裝置管用。在排序陣列中,找出給定數字出現的次數。如,1,2,2,2,3 中2出現的次數是3次。簡單粗暴的方法是從頭到尾遍歷一...
資料結構與演算法之一
電腦科學是通過使用計算機解決各種問題的研究領域。為了使用計算機解決給出的問題,您需要為其設計演算法。可設計多個演算法來解決特定的問題。提供了最大效率的演算法應用於解決此問題。演算法的效率可通過使用合適的資料結構來改善。資料結構幫助建立簡單 可重用和易於維護的程式。本模組允許學員選擇並實現合適的資料結...
資料結構實驗之一元多項式相加
實驗內容 結合書上第41頁的例子,採用鏈式儲存結構,將兩個線性鍊錶表示的一元多項式相加,並輸出。此一元多項式遵循多項式相加運算規則 對於兩個一元多項式中存在指數相同的項時,其對應係數相加。合併後係數和為零時,刪除 和多項式 中此項 合併後係數和不為零時,則構成 和多項式 中的一項。對於兩個一元多項式...